Есть ли веская причина для .NET сократить количество параллельных потоков с течением времени?
Я выполняю расчеты во многих проходах, которые занимают дни (каждый проход занимает ~ 1 час). Задачи представляют собой чистые вычисления данных в памяти (чтение с диска). Я использую Parallel.For
и Parallel.ForEach
несколько мест, как для основной задачи, так и внутри задачи. Все повторяется за много проходов. Экземпляры класса удаляются (профилировщик памяти не показывает никаких проблем с течением времени) правильно для каждого прохода, и создается новый экземпляр. Он повторяет 100% одну и ту же задачу в каждом проходе, за исключением того, что некоторые числа в математике изменяются (одинаковое количество итераций каждый раз, один и тот же набор данных).
Компьютер имеет шесть ядер, и приложение начинает работу, используя их все. Через некоторое время он использует 5, затем 4, затем 3, затем 2. Глядя на параллельные стеки (Отладка-> Окно-> Параллельные стеки), он подтверждает, что работает только это количество.
Почему .NET не использует максимальное количество потоков при каждом проходе? Регулирует ли он потоки в зависимости от использования ЦП?
Советы по отладке? Могу ли я принудительно использовать количество потоков?
.WithDegreeOfParallelism(value)
или явно создавать потоки самостоятельно. - person Marc   schedule 11.08.2011