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