是否可以限制Parallel.ForEach的核心?

时间:2011-04-01 10:47:49

标签: c# .net foreach parallel-processing

我在代码中使用Parallel.ForEach。我的所有8个内核都达到了100%。这对于在服务器上运行的其他应用程序来说很糟糕。 是否可以将执行限制为4核?

3 个答案:

答案 0 :(得分:42)

将设置为ParallelOptions的{​​{1}}的实例传递给ParallelOptions.MaxDegreeOfParallelism

然而,这可能在其他机器上没有意义,这些机器可能拥有比您更多或更少的核心。通常,您应该让框架决定并行度。

答案 1 :(得分:25)

您可以传递ParallelOptions MaxDegreeOfParallelism属性设置为4。

答案 2 :(得分:13)

以下是那些对其他答案不满意的人的代码

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);
});