Я считаю, что эта статья о параллелизме ThreadPool должна дать некоторые подсказки.
Задачи, созданные методами Parallel, в конечном итоге будут выполняться ThreadPool. Идеальное количество потоков, которое должен использовать ThreadPool, зависит от типа выполняемых задач. Если задачи блокируют много и не имеют большого количества конфликтов, большее количество потоков приведет к более высокой пропускной способности. Для задач с небольшим количеством блокировок и высоким уровнем конкуренции за ограниченные ресурсы, меньшее количество потоков приведет к более высокой пропускной способности.
Благодаря этому свойству ThreadPool в .NET 4 реализует алгоритм "восхождения на холм", в котором он настраивает количество потоков, выполняемых ThreadPool, и реагирует на основе измеренной пропускной способности.
Итак, одну вещь, которую вы можете проверить, это посмотреть, уменьшается ли фактическая производительность задания с уменьшенным количеством потоков. Также возможно, что когда ваше приложение работает, оно все больше и больше сталкивается с дисковыми операциями, а потоки закрываются просто из-за неиспользования.
Что касается принудительного использования ThreadPool определенного количества потоков, я не думаю, что это возможно. Есть ThreadPool.SetMinThreads , но это никогда не работало для меня. Как правило, .NET будет просто игнорировать эти значения и использовать любое количество потоков.