2

ホスト名に基づいてホストの 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. このメソッドによって生成されるリクエストの数を 1 秒あたりに制限する方法はありますか?

  2. ParallelOptions.MaxDegreeOfParallelism1 秒あたりのスレッド数を制御しないことを理解しているのでTPL、より良いオプションになる方法はありますか? これはいいえに制限できますか。1 秒あたりのリクエスト数

4

3 に答える 3