Можно ли ограничить ядра для Parallel.ForEach? - PullRequest
41 голосов
/ 01 апреля 2011

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

Ответы [ 3 ]

42 голосов
/ 01 апреля 2011

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

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

25 голосов
/ 01 апреля 2011

Вы можете передать ParallelOptions со свойством MaxDegreeOfParallelism, установленным в 4.

13 голосов
/ 28 января 2014

Вот код для тех, кто не удовлетворен другими ответами

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);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...