关于WebRequest 循环请求的超时问题求解!

狼烟辉 2014-01-15 10:14:11
代码如下:

List<T> list = Repository.GetAll();//1K条数据
WebRequest req;
WebResponse response;
Stream ReceiveStream;
StreamReader readerOfStream;
System.Net.ServicePointManager.DefaultConnectionLimit = 100;
list .ForEach(data =>
{
req = WebRequest.Create("http:*****/id=" + data.id);
req.Timeout = 100000;
response = req.GetResponse();

using (ReceiveStream = response.GetResponseStream())
{
using (readerOfStream = new StreamReader(ReceiveStream))
{
string strjson = readerOfStream.ReadToEnd();
if (!string.IsNullOrEmpty(strjson))
{
data.pid= strjson.Substring(3, 7);
}
}
}
response.Close();
});

如上,我获取的是某网站的json数据,大概有1000个网址,循环的匹配获取。
数据量在200左右很快,如果超过1K,则页面查询时出现一直加载的现象,怎么样处理能够解决或者缓解这样的情况,多线程?
...全文
336 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞花猪肉 2014-01-19
  • 打赏
  • 举报
回复
后台线程处理信息收集,前台做个良好的用户体验界面
lyx266 2014-01-17
  • 打赏
  • 举报
回复
慢是肯定的 你依次访问1000次网站 1次需要0.1秒 也要100秒 只能用多线程来处理了
狼烟辉 2014-01-17
  • 打赏
  • 举报
回复
引用 8 楼 wayu002 的回复:
不太清楚你想达到什么效果?
因为是查询的时候抓取网上商城的商品信息,要抓取的链接大约有1000多个,如果一次循环抓取会导致假死。 功能就是循环1000次访问网站,获取json信息,填充grid。 通过sleep可以解决这个问题,2分钟查询抓取完成,我就是想看有没有更好的方法。
wayu002 2014-01-17
  • 打赏
  • 举报
回复
不太清楚你想达到什么效果?
狼烟辉 2014-01-17
  • 打赏
  • 举报
回复
引用 5 楼 mmm306306 的回复:
线程+代理 抓取
问下,1000条数据,开10个线程,一个线程处理100条数据,这样大约需要1分多钟。
狼烟辉 2014-01-17
  • 打赏
  • 举报
回复
引用 1 楼 wayu002 的回复:
貌似你这个是同一个网站下不同的资源吧,循环1000次访问肯定会卡,增加了人家后台服务器的压力,没把你的ip封掉就不错了,加个sleep试试?
sleep一下确实可以,不过每次循环sleep(20),查询出来大约要2分钟,对于网络条件比较差的环境,估计要的时间更加长。
马老虎 2014-01-17
  • 打赏
  • 举报
回复
引用 7 楼 wolf_y 的回复:
[quote=引用 5 楼 mmm306306 的回复:] 线程+代理 抓取
问下,1000条数据,开10个线程,一个线程处理100条数据,这样大约需要1分多钟。[/quote] 数据量这么小 可以不使用多线程。加上代理就行了
md5e 2014-01-15
  • 打赏
  • 举报
回复
ajax调取
狼烟辉 2014-01-15
  • 打赏
  • 举报
回复
引用
貌似你这个是同一个网站下不同的资源吧,循环1000次访问肯定会卡,增加了人家后台服务器的压力,没把你的ip封掉就不错了,加个sleep试试?
的确是这样的,按照这个说法,如果我开10个线程,每个负责100条,这个应该会快很多。
wayu002 2014-01-15
  • 打赏
  • 举报
回复
貌似你这个是同一个网站下不同的资源吧,循环1000次访问肯定会卡,增加了人家后台服务器的压力,没把你的ip封掉就不错了,加个sleep试试?
马老虎 2014-01-15
  • 打赏
  • 举报
回复
线程+代理 抓取
狼烟辉 2014-01-15
  • 打赏
  • 举报
回复
引用 3 楼 liuchaolin 的回复:
ajax调取
我的需求是,先从数据库获取对象,然后根据此对象中的ID,来组合http,最后获取链接下的json信息再界面上展示,我对ajax不太熟,刚接触不久,能否详细点。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧