ホスト名に基づいてホストの FQDN を取得するメソッドを使用Dns.BeginGetHostEntry
しました (ホスト名のリストは SQL サーバー データベースに保存されます)。このメソッド (非同期) は、約 15 万レコードの実行を 30 分未満で完了し、ホスト名が格納されている SQL の同じテーブルで FQDN を更新します。
このソリューションは実行速度が速すぎます (1 秒あたり 300 リクエストのしきい値を超えています)。許可された番号以来。サーバーが生成する要求の数が制限されているため、私のサーバーはトップ トーカーにリストされており、このアプリケーションの実行を停止するように要求されています。このアプリケーションを再構築して同期的に実行する必要があり、完了までに 6 時間以上かかります。
//// TotalRecords are fetched from SQL database with the Hostname (referred as host further)
for (int i = 0; i < TotalRecords.Rows.Count; i++)
{
try
{
host = TotalRecords.Rows[i].ItemArray[0].ToString();
Interlocked.Increment(ref requestCounter);
string[] arr = new string[] { i.ToString(), host };
Dns.BeginGetHostEntry(host, GetHostEntryCallback,arr);
}
catch (Exception ex)
{
log.Error("Unknown error occurred\n ", ex);
}
}
do
{
Thread.Sleep(0);
} while (requestCounter>0);
ListAdapter.Update(TotalRecords);
質問:
このメソッドによって生成されるリクエストの数を 1 秒あたりに制限する方法はありますか?
ParallelOptions.MaxDegreeOfParallelism
1 秒あたりのスレッド数を制御しないことを理解しているのでTPL
、より良いオプションになる方法はありますか? これはいいえに制限できますか。1 秒あたりのリクエスト数