C# WebClient在第一次使用时响应缓慢

14

我正在使用WebClient从网站下载字符串(只包含纯文本,没有其他内容),因此我使用DownloadString方法:

WebClient wc = new WebClient();
string str = wc.DownloadString("http://blah");

它的功能很好,但问题是第一次下载字符串需要很长时间,大约5秒钟。之后就可以快速工作了。为什么会出现这种情况,该如何解决这个问题?


这是你的网络服务还是别人的?并且每次启动客户端时都会发生吗?(即使在下载字符串时直接重新启动?) - Peter
关联:https://dev59.com/2W855IYBdhLWcg3wUScW - BlueRaja - Danny Pflughoeft
还要注意,即使使用该方法的async版本,这也会导致应用程序冻结。这种狗屎是怎么发布出来的!? - BlueRaja - Danny Pflughoeft
3个回答

22

设置 WebClient 对象的 Proxy 属性为 null 可以消除您所看到的延迟。或者,如果您已经配置了系统使用代理,则可以使用 WebRequest.GetSystemWebProxy 来检索代理。无论哪种方法都应该消除延迟。


无论是 webClient.Proxy = WebRequest.GetSystemWebProxy() 还是 WebRequest.DefaultProxy 都不能解决问题,延迟仍然存在。将其设置为 nullGlobalProxySelection.GetEmptyWebProxy() 可以解决问题... 但是这样应用程序就无法在需要代理的连接上使用了!难道真的没有解决方案吗? - BlueRaja - Danny Pflughoeft

6

我注意到了同样的事情。DotTrace显示它花费大部分时间枚举代理选项:


4

首次访问需要进行DNS查找并连接到主机 - 之后,在同一进程中可能会重复使用相同的连接。对于第一次请求到任何地方,它也可能尝试检测代理设置等。

如果您想了解真正导致其变慢的网络层面上发生了什么,建议您使用Wireshark抓取流量并监视流量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接