多线程Web请求性能问题

时间:2017-09-12 09:10:17

标签: c# multithreading httpwebrequest webrequest

我想使用多线程网络请求,但我没有得到我期望的性能。

我正在运行4核心的计算机,上传速度为1 Gbps,下载速度为1 Gbps。

对于测试我正在下载谷歌主页。

来自Google页面的数据大小约为50 KB。

我同时发送1000个请求,除了在~2秒内完成所有请求,但完成时间超过20秒

我的代码如下:

main.cpp

2 个答案:

答案 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;