我遇到了Webclient的问题。
这很慢。从一个网站下载串串大约需要3-5秒。 我没有任何网络问题。
这是我的Modifed WebClient。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
namespace StatusChecker
{
class WebClientEx: WebClient
{
public CookieContainer CookieContainer { get; private set; }
public WebClientEx()
{
CookieContainer = new CookieContainer();
ServicePointManager.Expect100Continue = false;
Encoding = System.Text.Encoding.UTF8;
WebRequest.DefaultWebProxy = null;
Proxy = null;
}
public void ClearCookies()
{
CookieContainer = new CookieContainer();
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = CookieContainer;
}
return request;
}
}
}
更新: 在wireshark中,我看到单个DownladString正在发送和接收数千个数据包。
答案 0 :(得分:29)
这里可能有两个问题(我之前在自己的程序中也注意到了这一点):
WebRequest
默认情况下会在第一次启动时检测并加载代理设置,这可能需要一段时间。要停止此操作,只需将代理属性(WebRequest.Proxy
)设置为null
,它就会绕过检查(前提是您可以直接访问互联网)ServicePointManager.DefaultConnectionLimit
设置为更大的值。我通常将其设置为int.MaxValue
(只是确保您不会通过1,000,000个连接向主机发送垃圾邮件)。答案 1 :(得分:0)
也许它会对某人有所帮助。某些Web服务支持压缩(gzip或其他)。因此,您可以为请求添加Accept-Encoding标头,然后为Web客户端实例启用automatic decompression。 Chrome以这种方式运作。
答案 2 :(得分:0)
如果与要检查的初始代理设置相关,则有几个选项:
将代理设置为null:
WebClient.Proxy = null
在应用程序启动时,将默认的webproxy设置为null:
WebRequest.DefaultWebProxy = null;
在较旧的.NET代码中,而不是设置为null,您曾经写过这个(但现在首选null):
webclient.Proxy = GlobalProxySelection.GetEmptyWebProxy();