私はパブリック API のパフォーマンス テストを並行して同時呼び出しでロードすることで忙しくしています。以下のコード。
int batchSize = 10;
ParallelOptions parallelOptions = new ParallelOptions();
parallelOptions.MaxDegreeOfParallelism = batchSize;
Parallel.For(0, batchSize, parallelOptions, j =>
{
Debug.WriteLine("Thread began at " + DateTime.Now.ToLongTimeString());
using (WebClient client = new WebClient())
{
Stopwatch sw = Stopwatch.StartNew();
byte[] arr = client.DownloadData("http://myapiurl/webservice.svc");
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds.ToString());
}
});
しかし、私は奇妙な結果を得ています:
デバッグ出力から、すべてのスレッドが (予想どおり) まったく同時に開始されていることがわかります。
また、Web サービス内からの API 呼び出しの処理にかかった時間も記録しています (これはログ テーブルに保存されます)。各呼び出しにはほぼ同じ時間がかかります... 約 2.5 秒。
しかし、現在、コンソール出力は相関していません。Web サービスが記録するものよりもわずかに長いだけだと思います。出力:
2883 2914 5653 5822 8000 8250 10215 10539 11622 12494
これには、次のような理由が考えられます。
それ
WebClient.DownloadData
自体のインスタンス間で私のリクエストをキューに入れているかのようです。IIS が Web 要求をキューに入れています。API に他に何もヒットしていないため、これは不可能です。