3

かなり基本的なことをしたいと思いますが、かなり基本的な例はまだ見つかりません。これが私がやりたいことです:

オブジェクトのリストが与えられたら、リスト内の各要素を繰り返し処理し、かなりリソースを集中的に使用するメソッドを呼び出したいと思います。これを、実行中のアプリケーションで利用できる数のコアに分割して、8 コア デバイスで実行している場合、一度に最大 8 つの要素を処理できるようにしたいと考えています。すべての計算は互いに完全に独立しており、1 つの要素の処理が完了すると、リスト内の次の要素が開始されることを期待しています。

いつでもリストにいくつのアイテムが表示されるかはわかりません。また、利用可能なコアの数もわかりません。時々、1つのコア。

ありがとう。

4

2 に答える 2

10
Parallel.ForEach(items, currentItem =>
{
     // TODO: process a current item
     Debug.WriteLine("[{0}] {1} {2}", 
                    Thread.Current.ManagedThreadId , 
                    DateTime.Now,
                    currentItem);
};

items変数は、IEnumerableまたはを実装する型のインスタンスである必要がありますIEnumerable<T>

またParallelOptions、MaxDegreeOfParalellismを指定して、スレッド間で作業を分散するときにThreadPoolが使用できるスレッドの数を制御することもできます。

var options = new ParallelOptions
      {
         MaxDegreeOfParallelism = 2
      };

Parallel.ForEach(items, options, currentItem =>
{
     // TODO
});

MSDN:方法:単純なParallel.ForEachループを作成するも参照してください。

于 2012-10-24T20:32:32.937 に答える