C# HttpWebRequest三件需要注意的事

使用微软的.Net框架的时候很可能会接触到HttWebRequest。使用者在使用的时候有时候会发现这种现象即有时候使用多线程下载速度会变的非常的慢,特别是如果使用多线程去获取响应头部时候。这时候HttpWebRequest 就会让人非常的扫兴。开始的时候使用者很可能认为这是网络连接的原因,但是最近通过和wGet和cUrl两个第三方库进行对比发现这种现象的问题关键并不是网络拥塞原因,而是.Net实现的原因。

为了提高多线程下载的响应和速度有三件事需要注意:
1: 提高 DefaultConnectionLimit
所有的HttpWebRequst类的实例对象都使用ServicePointManager的一些属性,其中一个属性就是”DefaultConnectionLimit”. 默认情况它的值是2,也就是说最多只有两个连接同时建立。如果你想用超过两个以上的多线程进行网络下载的时候这个限制显然成为一个主要障碍,所以为了提高下载响应时间和速度,可以适当增加这个上限值,这个值需要对当前的网络环境有一定了解后来进行设定。

ServicePointManager.DefaultConnectionLimit = connectionLimit;

2:设置正确的代理
另外一个瓶颈就是代理服务器的设置,如果在搜索引擎搜索HttpWebRequest的问题时候,就会一个频繁的问题描述即第一次查询耗费了较长的时间,后面的查询则相对快些。出现这种情况的原因是,使用HttpWebRequest实例的时候,第一次它会去搜索系统代理设置,这种搜索过程需要花费2-8秒钟,有两种方法解决这个问题。
(1)不设置代理
如果不需要代理则直接设置代理为null.这样第一次就不会有系统代理(System-wide)设置查询过程。

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
req.Proxy = null;

(2)必需代理情况
对于必需代理话而且清楚代理的具体设置的话,则我们手动来设置代理。这样缓慢的搜索代理的过程就不复存在了。

string proxy_url = "proxy.my_proxy.com";
int proxy_port = 8080;
WebProxy proxy = new WebProxy(proxy_url, proxy_port);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Proxy = proxy;

3:关闭Continue(100)
最后一个细节可以介绍几秒钟的时间,更具体的说,对于每个查询需要1/3秒的时间,对于不同数目的查询量(Http连接查询)这个时间也会不同,查询量越大则时间就越多。默认情况下配置一个Continue(100)会被发送在每次查询之前,如果服务器准备处理客户端发送的连接请求即查询的时候,客户端将会接收到来自服务端的响应并开始发送真正的请求。假设当前对服务器有了解并且知道服务器肯定会接受客户端的请求,则可以disable Continue(100)请求。另外,会有一些服务软件本来就不处理Continue(100)的请求,想了解更多上网搜索更多关于100(Continue)的相关内容,或者查询RFC关于Http协议说明
这里写图片描述

ServicePointManager.Expect100Continue = false;

文章转自 原文链接

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值