我想使用多线程的Web请求,但我没有得到我期望的性能。多线程的Web请求性能问题
我使用4核心的计算机运行,上载速度为1 Gbps,下载速度为1 Gbps。
对于我正在下载谷歌主页的测试。
从谷歌网页的数据大小是〜50 KB。
我同时发送1000个请求,我除了完成〜2秒内的所有请求,但它需要超过20秒才能完成
我的代码看起来是这样的:
bool success = ThreadPool.SetMinThreads(workerThreads: 2000, completionPortThreads: 1000);
success = ThreadPool.SetMaxThreads(2000, 2000);
DateTime dt = DateTime.UtcNow;
Parallel.For(0, 1000, (num) =>
{
string url = "https://www.google.co.il/?gfe_rd=cr&dcr=0&ei=OZy3WcmoMY7b8Affj4F4&gws_rd=ssl";
using (WebClient web = new WebClient())
{
byte[] bytes = web.DownloadData(url);
}
}
);
double sec = (DateTime.UtcNow - dt).TotalSeconds;
Console.WriteLine(sec);
https://stackoverflow.com/questions/1361771/max-number-of-concurrent-httpwebrequests –
另外,注意'Parallel.For'将只使用一个每个核心线程(所以在你的情况下,四个线程)。这不是用于I/O绑定操作的正确工具 –
另外,默认情况下,ServicePiontManager将任何主机的并发请求限制为2个。您需要更改默认的连接限制,或者查看向您的app.config文件添加connectionManagement部分。 –