1

マルチスレッドについてアドバイスが必要です。

例: 200 個のスレッドを生成したいのですが、それぞれが Web サイトから 1 つの異なる画像を取得する必要があります (サイトは少し遅いです)。しかし、最大があるはずです。一度に 40 スレッド。

何か案が?

いくつかの答えを楽しみにしています。

4

4 に答える 4

2

これには簡単に使用できますThreadPool。プールはスレッドをうまく管理しますが、本当に使用できる最大数を制限する必要がある場合は、次のようにします。

ThreadPool.SetMaxThreads(40, 40);

// submit 200 tasks to the pool
for(int i = 0; i < 200; i++)
{
   ThreadPool.QueueUserWorkItem(
       () =>
       {
           // code for each task
       });
}

残念ながら、タスクが終了するのを待つ組み込みの方法はないので、何かを即興で演奏する必要があります。.NET 4.0にアクセスできる場合は、以下を確認できますParallel.For

ParallelOptions po = new ParallelOptions();
po.MaxDegreeOfParallelism = 40;
Parallel.For(0, 200, po,
   i =>
   {
      // code for each task
   });
于 2012-07-12T12:51:37.680 に答える
1

必要なすべての URL で満たされたスレッドセーフなキューを使用します。

そのキューから次のアイテムを取得し、URL からダウンロードすることをジョブとする 40 個のスレッドを作成します。キューが空になると、スレッドは終了するはずです。

于 2012-07-12T12:14:22.807 に答える
0

試す

SlimSemaphore slm=new SlimSemaphore(40);

slm.Wait()

[your code]

slm.Release();

これにより、一度に実行できるスレッドは40個のみになります。

注:SlimSemaphore(.Net Framework 4.0を使用している場合)それ以外の場合はSemaphore

 only efficiency difference is there
于 2012-07-12T12:24:28.890 に答える
0

作成して Parallel.ForEach ループに提供する ParallelOptions オブジェクトを使用して、MaxDegreeParallelism を設定できます。後で適切なキーボードの背後にいるときに、いくつかのコードを貼り付けます。

于 2012-07-12T12:48:03.673 に答える