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