マルチスレッドのWeb要求を使用したいと思いますが、期待したパフォーマンスが得られません。マルチスレッドのWeb要求パフォーマンスの問題
私は、1Gbpsのアップロードと1Gbpsのダウンロードで、4つのコアを搭載したコンピュータで動作しています。
テスト用に私はGoogleのメインページをダウンロードしています。
Googleのページからのデータのサイズは〜50 KBです。
私は同時に1000年のリクエストを送信していると私は〜2秒以内にすべての要求を完了する場合を除き、それが完了するまでに20秒以上かかります
私のコードは次のようになります。
bool success = ThreadPool.SetMinThreads(workerThreads: 2000, completionPortThreads: 1000);
success = ThreadPool.SetMaxThreads(2000, 2000);
DateTime dt = DateTime.UtcNow;
Parallel.For(0, 1000, (num) =>
{
string url = "https://www.google.co.il/?gfe_rd=cr&dcr=0&ei=OZy3WcmoMY7b8Affj4F4&gws_rd=ssl";
using (WebClient web = new WebClient())
{
byte[] bytes = web.DownloadData(url);
}
}
);
double sec = (DateTime.UtcNow - dt).TotalSeconds;
Console.WriteLine(sec);
https://stackoverflow.com/questions/1361771/max-number-of-concurrent-httpwebrequests –
、 'Parallel.For'は一つだけを使用することに注意してくださいコアごとのスレッド(あなたの場合は4つのスレッド)。これはI/Oバウンド操作に使用する適切なツールではありません –
また、ServicePiontManagerは、デフォルトでは、任意のホストに対する2つの同時リクエストに制限します。デフォルトの接続制限を変更するか、app.configファイルにconnectionManagementセクションを追加する必要があります。 –