以下是我想要展示的非常简单的场景:
internal class Program
{
private static void Main(string[] args)
{
var uri = new Uri("http://myserver.com");
ServicePointManager.FindServicePoint(uri).ConnectionLimit = 1000;
for (int i = 0; i < 1000; i++)
{
WebRequest.Create(uri).BeginGetResponse(a => { }, null);
}
Console.WriteLine("done");
Console.ReadLine();
}
}
相应的App.config:
<system.net>
<connectionManagement>
<clear/>
<add address="*" maxconnection="1000" />
</connectionManagement>
<defaultProxy>
<proxy proxyaddress="http://127.0.0.1:8888" />
</defaultProxy>
</system.net>
假设myserver.com响应10秒(我通过AutoResponder在Fiddler中进行了仿真)。
在代理服务器(Fiddler)中,我看到在应用程序启动时只发送了14个http请求。然后,活动连接的数量正在增长,但非常慢,在1-2秒内约为+1请求。因此,工作1分钟后,活动的http请求数约为50,但不是1000。
是否有任何配置我可以更改以强制.NET打开,如果不是1000真正的http请求但至少200-300?
答案 0 :(得分:1)
我认为最好的解决方案是在新线程中打开每个连接。
线程限制是 在.NET 4 32位系统中使用1023 .NET 4 64位系统中的32768
如果它至少不起作用,您将确保代码中没有任何错误。