Взято из документации Microsoft:
По умолчанию пул потоков содержит 250 рабочих потоков на каждый доступный процессор. Вы можете изменить этот параметр с помощью метода ThreadPool.SetMaxThreads.
Также широко известно, что есть некоторые накладные расходы:
Потоки имеют некоторый уровень накладных расходов. Поэтому, если компьютер имеет несколько процессоров и вы разделяете обработку на два потока, вы не увидите 100-процентного повышения производительности.
Исходя из некоторого опыта и предположений, у меня было бы что-то вроде от 1 до 4 потоков на ЦП, а не 250! Кто-нибудь знает, почему 250? Это какое-то значение, которое должно обеспечить наилучшую общую производительность, или это для того, чтобы почти каждая задача, которую вы отдаете этому пулу потоков, была обрабатывается, не дожидаясь завершения других задач?