解决WebClient或HttpWebRequest首次连接缓慢问题

标签: vb.net .net 语言 框架 编程 c#
139235人阅读 评论(36) 收藏 举报
分类:

【编程环境】Visual Studio 2010, NET4.0

【开发语言】C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响

【问题描述】

使用HttpWebRequest抓取网页内容,但首次请求总是莫名奇妙的阻塞在Request.GetResponse();上,不过一旦这次请求成功,后续的操作就很快了(如果是针对同一对象)。

相同的代码编译在NET3.5环境中却一切正常,而在NET4.0环境中执行就出这问题,难道是一个BUG?

【解决方案】

在配置文件中(.config)中添加配置节:

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <system.net>
    <defaultProxy
        enabled="false"
        useDefaultCredentials="false" >
      <proxy/>
      <bypasslist/>
      <module/>
    </defaultProxy>
  </system.net>
</configuration>

【问题所在】 

.NET4.0中的默认代理是开启的,而我并没有设置!故只有等待超时后才会绕过代理,这就阻塞了.

【参考资料】

"It's not set at all in app.cong or machine.config. Hmm. If I'm reading the
MSDN docs right, the default for defaultProxy.enabled is TRUE if the element
isn't specified at all. That would be consistent with my observations.
"

http://msdn2.microsoft.com/en-us/library/kd3cf2ex(VS.80).aspx

【问题引申】

如果在其它版本的.NET环境中遇到类似问题,不妨尝试WebClient.Proxy = null;或HttpWebRequest.Proxy = null.

【总结】

问题往往出于不注意,我们要多加'小心'.

希望能帮到您!

查看评论

client.transport.sniff的使用方法

通过TransportClient这个接口,我们可以不启动节点就可以和es集群进行通信,它需要指定es集群中其中一台或多台机的ip地址和端口,例子如下: Client client = new ...
  • ljc2008110
  • ljc2008110
  • 2015-09-21 18:43:44
  • 5973

C# 第一次网络请求速度慢的原因

修改后代码如下: public string RequestServer(string requestUriString) { try ...
  • nihang1234
  • nihang1234
  • 2017-04-26 18:55:48
  • 283

C#Winform使用WebClient第一次很慢

C#Winform使用WebClient、WebBrowser或Web Service第一次很慢,以后就很快了,据说这是.net特有的。 通过查找,得知可以设置proxy=null 或者在app....
  • daiqianjie
  • daiqianjie
  • 2012-10-31 15:40:42
  • 804

C# HttpWebRequest第一次请求很慢超时的原因

在使用HttpWebRequest建立http请求时,第一次连接的响应速度会很慢,而且还会出现请求超时的错误,这里大概有十几秒钟的等待时间,但是一旦第一次运行成功后,下面的请求页面速度就会很快了。 ...
  • hatchgavin
  • hatchgavin
  • 2016-08-10 16:43:56
  • 2289

实测 c# .net 中 httpwebrequest 和 httpclient 性能 区别 对比

实测 c# .net 中 httpwebrequest 和 httpclient 性能 区别 对比 实测效果 httpwebrequest 可以达到4000QPS峰值,2000到3000QPS均值...
  • tiger3927
  • tiger3927
  • 2017-10-06 16:53:14
  • 2527

C# HttpWebRequest HttpWebReponse 挂起无反应,阻塞解决方案

关于连接被阻塞的解决方案有不少,通常如增加连接数目,如:System.Net.ServicePointManager.DefaultConnectionLimit = 512; 这个值据称一般不应大于...
  • shenmafuyunnan
  • shenmafuyunnan
  • 2015-09-18 10:17:39
  • 2093

莫名其妙的 C# HttpWebRequest.GetResponse() 超时错误

作者:Liigo 日期:20170303 原创链接: 著作权归作者Liigo所有。商业转载请联系作者获得授权,非商业转载请注明出处。现象现象:GET请求 “特定URL” 时超时,无法获取Resp...
  • liigo
  • liigo
  • 2017-03-03 18:03:24
  • 6236

[C#] WebClient性能优化

C#的WebClient需要修改默认设置,否则性能太差了。
  • wwwsq
  • wwwsq
  • 2015-03-07 23:25:12
  • 5996

SecureRandom生成随机数超慢 导致tomcat启动时间过长的解决办法

使用腾讯云的CentOS 7.2 CVM 服务器跑Tomcat时发现,Tomcat启动的特别慢,通过查看日志,发现时间主要花在实例化SecureRandom对象上了。由该日志可以看出,实例化该对象使用...
  • upshi
  • upshi
  • 2017-02-07 10:57:32
  • 5055

从内存池到连接池 老码农眼中的资源池

如果将互联网应用比喻成冲浪的话, 可能需要先学会在池中游泳吧。引子AI赋能万物,老码农的伙伴们也曾经开发了一个基于图数据库的知识问答系统,在压力测试的时候发现随着并发数的增加,响应的时延明显变长,看时...
  • wireless_com
  • wireless_com
  • 2018-01-16 11:02:59
  • 1688
    最新评论