use - thread c# visual studio




Número máximo de segmentos em um aplicativo.NET? (4)

Eu fiz um teste em um sistema de 64 bits com c # console, a exceção é o tipo de memória insuficiente, usando 2949 threads.

Eu percebo que devemos usar o pool de threads, o que eu faço, mas esta resposta é em resposta à questão principal;)

Qual é o número máximo de threads que você pode criar em um aplicativo C #? E o que acontece quando você atinge esse limite? É uma exceção de algum tipo lançada?


Jeff Richter no CLR via C #:

"Com a versão 2.0 do CLR, o número máximo de encadeamentos de trabalho é 25 por CPU na máquina e o número máximo de encadeamentos de E / S é 1000. Um limite de 1000 não tem limite algum."

Observe que isso é baseado no .NET 2.0. Isso pode ter mudado no .NET 3.5.

[Edit] Como apontado pelo @Mitch, isso é específico para o ThreadPool do CLR. Se você está criando tópicos diretamente, veja os comentários do @Mitch e outros.


Não há limite inerente. O número máximo de encadeamentos é determinado pela quantidade de recursos físicos disponíveis. Veja este artigo por Raymond Chen para detalhes.

Se você precisa perguntar qual é o número máximo de threads, você provavelmente está fazendo algo errado.

[ Atualização : apenas por interesse: números padrão de Thread Pool do .NET.

  • 1023 no Framework 4.0 (ambiente de 32 bits)
  • 32767 no Framework 4.0 (ambiente de 64 bits)
  • 250 por núcleo no Framework 3.5
  • 25 por núcleo no Framework 2.0

(Estes números podem variar dependendo do hardware e sistema operacional)


Você deve estar usando o conjunto de encadeamentos (ou delgates assíncronos, que, por sua vez, usam o conjunto de encadeamentos) para que o sistema possa decidir quantos encadeamentos devem ser executados.





multithreading