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 でエミュレートしました)。

プロキシ サーバー (Fiddler) では、アプリケーションの開始時に 14 個の http 要求のみが送信されていることがわかります。その後、アクティブな接続の数は増加していますが、非常に遅く、約 1 ~ 2 秒で +1 リクエストです。したがって、1 分間の作業の後、アクティブな HTTP リクエストの数は約 50 ですが、1000 ではありません。

実際の http 要求が 1000 ではなく、少なくとも 200 ~ 300 の場合に .NET を強制的に開くように変更できる構成はありますか?

4

1 に答える 1

1

最善の解決策は、新しいスレッドで各接続を開くことだと思います。

スレッド制限は、.NET 4 32 ビット システムでは 1023、.NET 4 64 ビット システムでは 32768 です。

少なくともうまくいかない場合は、コードに問題がないことを確認できます。

于 2013-06-20T16:33:27.443 に答える