Я использую Parallel.ForEach
в своем коде. Все мои 8 ядер идут на 100%. Это плохо для других приложений, работающих на сервере. Можно ли ограничить выполнение как 4 ядра?
Возможно ли ограничить ядра для Parallel.ForEach?
Ответ 1
Передайте экземпляр ParallelOptions
с ParallelOptions.MaxDegreeOfParallelism
, установленным с 4 на Parallel.ForEach
.
Тем не менее это может не иметь смысла на других машинах, которые могут иметь больше или меньше ядер, чем вы. В общем случае вы должны позволить структуре определить степень parallelism.
Ответ 2
Вы можете передать ParallelOptions
с свойством MaxDegreeOfParallelism
, установленным в 4.
Ответ 3
Вот код для тех, кто не удовлетворен другими ответами
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);
});