C# 是否可以限制Parallel.ForEach的核数?

C# 是否可以限制Parallel.ForEach的核数?,c#,.net,foreach,parallel-processing,C#,.net,Foreach,Parallel Processing,我在代码中使用了Parallel.ForEach。我所有的8核都达到100%。这对服务器上运行的其他应用程序是有害的是否可以将执行限制为4个内核?您可以在属性设置为4的情况下传入一个。使用并行选项传递并行选项的实例。MaxDegreeOfParallelism设置为4以并行。ForEach 然而,这在其他机器上可能没有意义,因为它们的内核可能比您的多或少。一般来说,您应该让框架决定并行度。以下是一些代码,供那些对其他答案不满意的人使用 List<int> iList = new Li

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

您可以在属性设置为4的情况下传入一个。

使用
并行选项传递
并行选项的
实例。MaxDegreeOfParallelism
设置为4以
并行。ForEach


然而,这在其他机器上可能没有意义,因为它们的内核可能比您的多或少。一般来说,您应该让框架决定并行度。

以下是一些代码,供那些对其他答案不满意的人使用

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);
});
List iList=newlist(){1,2,3,4,5,6,7,8};
System.Threading.Tasks.ParallelOptions opt=新建System.Threading.Tasks.ParallelOptions();
opt.MaxDegreeOfParallelism=4;//
{
//用平行度做某事
控制台写入线(i);
});

请参见@Kees:不,调整线程优先级通常不是一个好主意。任务不是线程…硬编码为“4”不是一个好主意
Environment.ProcessorCount/2
会做得更好。@Henk:这是对2:)的硬编码。我刚才回答了问题。。。OP究竟是如何计算出他们想要多少核的,多少有些超出了范围。(例如,您可能希望它完全运行。)
Environment.ProcessorCount
返回逻辑处理器的数量,而不是核心数。这不是Kees需要的。有关确定核心数的信息,请参见@all I不会硬编码核心数;-)。看起来是一个完美的配置设置。@Henk:这将在单核计算机上遇到问题:)的可能重复项