Подтвердить что ты не робот

Возможно ли ограничить ядра для Parallel.ForEach?

Я использую Parallel.ForEach в своем коде. Все мои 8 ядер идут на 100%. Это плохо для других приложений, работающих на сервере. Можно ли ограничить выполнение как 4 ядра?

4b9b3361

Ответ 1

Передайте экземпляр ParallelOptions с ParallelOptions.MaxDegreeOfParallelism, установленным с 4 на Parallel.ForEach.

Тем не менее это может не иметь смысла на других машинах, которые могут иметь больше или меньше ядер, чем вы. В общем случае вы должны позволить структуре определить степень parallelism.

Ответ 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);
});