.NET сокращает количество параллельных потоков при повторных запусках

Есть ли у .NET какие-либо веские причины для сокращения количества параллельных потоков с течением времени?

Я выполняю вычисления во многих проходах, выполнение которых занимает дни (каждый проход занимает ~ 1 час ). Задачи - это чистые вычисления данных в памяти (чтение с диска). Я использую Parallel.For и Parallel.ForEach в нескольких местах, как для основной задачи, так и внутри задачи. Все повторяется во многих проходах. Экземпляры классов удаляются (профилировщик памяти не показывает проблем с течением времени) правильно для каждого прохода, и создается новый экземпляр. Он на 100% повторяет одну и ту же задачу на каждом проходе, за исключением того, что некоторые числа в математике изменяются (равное количество итераций каждый раз, один и тот же набор данных).

У компьютера шесть ядер, и приложение запускается, используя все их. Через некоторое время он использует 5, затем 4, затем 3, затем 2. Глядя на параллельные стеки (Debug-> Window-> Parallel stacks), он подтверждает, что только некоторые из них работают.

Почему .NET не работает на максимальном уровне. количество потоков на каждом проходе? Регулирует ли он потоки в зависимости от использования ЦП?

Советы по отладке? Могу ли я принудительно использовать количество потоков?

11
задан Skomski 11 August 2011 в 14:59
поделиться