web-dev-qa-db-ja.com

Parallel.ForEachのコアを制限することは可能ですか?

コードでParallel.ForEachを使用しています。私の8コアはすべて100%になります。これは、サーバー上で実行されている他のアプリにとっては悪いことです。 実行を4コア程度に制限することは可能ですか?

41
Kees C. Bakker

ParallelOptions.MaxDegreeOfParallelismを4に設定したParallelOptionsのインスタンスをParallel.ForEachに渡します。

それでも、コア数が多かったり少なかったりする他のマシンでは、これは意味をなさない場合があります。一般に、フレームワークに並列度を決定させる必要があります。

42

ParallelOptions プロパティを4に設定して、 MaxDegreeOfParallelism を渡すことができます。

26
Jon Skeet

ここに他の答えに満足していない人のためのいくつかのコードがあります

List<int> iList = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };

System.Threading.Tasks.ParallelOptions opt = new System.Threading.Tasks.ParallelOptions();
opt.MaxDegreeOfParallelism = 4; // << here the maximum of 4 cores

System.Threading.Tasks.Parallel.ForEach<int>(iList, opt, i =>
{
    // do someting with parallelism 4
    Console.WriteLine(i);
});
13
fubo