我想使用多線程的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部分。 –