1

这是我想展示的非常简单的场景:

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 中模拟了这一点)。

在代理服务器(提琴手)中,我看到在应用程序启动时只发送了 14 个 http 请求。然后活动连接的数量正在增长但非常缓慢,大约在 1-2 秒内 +1 个请求。因此,经过 1 分钟的工作,活跃的 http 请求数约为 50,但不是 1000。

如果不是 1000 个真正的 http 请求但至少 200-300 个,我是否可以更改任何配置以强制 .NET 打开?

4

1 回答 1

1

我认为最好的解决方案是在新线程中打开每个连接。

.NET 4 32 位系统中的线程限制为 1023 .NET 4 64 位系统中的线程限制为 32768

如果它不起作用,至少你会确定你的代码没有任何问题。

于 2013-06-20T16:33:27.443 回答