Значения по умолчанию для System.Threading.ThreadPool.SetMaxThreads

Предположим, я не устанавливаю какие-либо значения явно, вызывая функцию:

System.Threading.ThreadPool.SetMaxThreads

Каковы значения по умолчанию?

Ответы на вопрос(3)

There is one thread pool per process. Beginning with the .NET Framework version 4, the default size of the thread pool for a process depends on several factors, such as the size of the virtual address space. A process can call the GetMaxThreads method to determine the number of threads. The number of threads in the thread pool can be changed by using the SetMaxThreads method. Each thread uses the default stack size and runs at the default priority. Blockquote

Unmanaged code that hosts the .NET Framework can change the size of the thread pool by using the CorSetMaxThreads function, defined in the mscoree.h file.

Решение Вопроса

Это зависит от версии платформы .NET, измененной в 2.0, 3.0 и 4.0. В 2.0 было в 50 раз больше ядер. В 3.0 (он же 2.0 SP1) это было в 250 раз больше ядер, 4.0 делало его динамическим в зависимости от разрядности и ресурсов ОС. Максимальное количество потоков завершения ввода / вывода всегда было 1000, если я правильно помню.

В общем, это безумно высоко, и программа должнаnever приблизиться. На 32-разрядной машине программа, скорее всего, сначала начнет бомбить OOM, когда все эти потоки потребляют доступную виртуальную память со своими стеками в один мегабайт. В общем случае, он может выйти из-под контроля только тогда, когда есть много запросов потока TP, а запущенные не завершаются дляminutes, Идеал для нити TP - не занимать больше половины секунды.

Отладка & gt; Windows & gt; Окно отладчика потоков рассказывает неприятную правду. И дает очень хороший совет, почему эти потоки TP не завершаются, вы можете увидеть их стек вызовов.

Это не фиксированное число, оно зависит от доступной памяти и других факторов - вы можете найти его во время выполнения, используяGetMaxThreads()

 Shamim Hafiz08 июн. 2012 г., 13:13
Если мое приложение содержит более 30 потоков, работающих одновременно, будет ли слишком жестким задано значение 64?
 08 июн. 2012 г., 13:18
если это вообще возможно, я бы позволил .NET Framework решить, сколько потоков подходит. Следует автоматически попытаться выбрать количество потоков для оптимизации пропускной способности

Ваш ответ на вопрос