8

次のような単純なコンソール アプリケーションがあります。

    private static StringBuilder sb = new StringBuilder();
    private static HttpClient client = new HttpClient();

    private static async Task<HttpStatusCode> AccessTheWebAsync()
    {            
        HttpResponseMessage response = await client.GetAsync("http://www.google.com").ConfigureAwait(false);
        return response.StatusCode;
    }

    static void Main(string[] args)
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        List<Task> tasks = new List<Task>();
        for (int i = 0; i < 10; i++)
            tasks.Add(AccessTheWebAsync());
        Task.WaitAll(tasks.ToArray());

        foreach (Task<HttpStatusCode> t in tasks)
            sb.Append((int)t.Result).Append(Environment.NewLine);
        Console.WriteLine(sb.ToString());            
        sw.Stop();
        Console.WriteLine("Run Completed, Time elapsed: {0}", sw.Elapsed);
        Console.ReadLine();
    }

ここでは、10 個の非同期 Web 要求を開始し、要求が完了したときに応答コードを収集して一覧表示します。

  1. 質問: VS2012 を使用してアプリをデバッグし、実行中の任意の時点で発生している同時 Web 要求の数を特定することはできますか?

理由は、次の場所で変更できることがわかったからですApp.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.net>
    <connectionManagement>
      <add address = "*" maxconnection = "10" />
    </connectionManagement>
  </system.net>
</configuration>

しかし、これが実際に機能しているかどうかを判断する良い方法はありません。

  1. サーバーはこの制限を設定しますか?

  2. OS はこの制限を設定しますか?

  3. このアプリ構成および/または .NET はこの制限を設定しますか?

4

2 に答える 2

2

VS2012 を使用してアプリをデバッグし、実行中の任意の時点で発生している同時 Web 要求の数を判断できるようにすることはできますか?

はい、確かに。Parallel TasksParallel Stacksウィンドウを使用してください。非常に優れています。

  1. サーバーはこの制限を設定しますか?

  2. OS はこの制限を設定しますか?

  3. このアプリ構成および/または .NET はこの制限を設定しますか?

この設定は、ネットワーク ホストへの最大接続数を指定し、マシンまたはアプリケーション レベルで設定できます。サーバーはクライアントの接続制限も設定できますが、それはmaxconnection属性とは関係ありません。

あなたの例では、実際の接続の最大数もスレッドプールの設定によって制限される可能性があります。詳細については、この KB エントリをご覧ください。

于 2012-11-20T21:58:55.030 に答える
0

static int 変数を使用し、Interlock Increment / Decrement を使用します。 http://msdn.microsoft.com/de-de/library/vstudio/dd78zt0c.aspx

于 2012-11-16T17:53:15.233 に答える