我想使用多线程网络请求,但我没有得到我期望的性能。
我正在运行4核心的计算机,上传速度为1 Gbps,下载速度为1 Gbps。
对于测试我正在下载谷歌主页。
来自Google页面的数据大小约为50 KB。
我同时发送1000个请求,除了在~2秒内完成所有请求,但完成时间超过20秒
我的代码如下:
main.cpp
答案 0 :(得分:0)
我认为在你的情况下更好的选择是使用HttpClient
进行显式异步操作,让windows管理线程池本身。
Stopwatch sw = new Stopwatch();
sw.Start();
for (int i = 0; i < 1000; i++)
{
var httpClient = new HttpClient();
results[i] = httpClient.GetByteArrayAsync(@"https://www.google.co.il/?gfe_rd=cr&dcr=0&ei=OZy3WcmoMY7b8Affj4F4&gws_rd=ssl");
}
var status = Task.WhenAll(results); //WhenAny if you can process results independently
var pages = status.Result;
sw.Stop();
double sec = sw.Elapsed.TotalSeconds;
Console.WriteLine(sec);
附注:请考虑将Stopwatch
用于time measurement。
答案 1 :(得分:-1)
解决方案是:
System.Net.ServicePointManager.DefaultConnectionLimit = int.MaxValue;