Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
No Windows, a Environment.ProcessorCount propriedade agora respeita a afinidade de processo e o limite rígido do objeto de trabalho na utilização da CPU.
Descrição da alteração
Nas versões anteriores do .NET, a Environment.ProcessorCount propriedade no Windows retorna o número de processadores lógicos no computador. A propriedade ignora a afinidade de processo e o limite rígido do objeto de trabalho na utilização da CPU. Esse comportamento do Windows é inconsistente com o comportamento em sistemas operacionais baseados em Unix, em que esses limites são respeitados.
A partir do .NET 6, o comportamento do Environment.ProcessorCount Windows é consistente com o comportamento no sistema operacional baseado em Unix. Em geral, Environment.ProcessorCount retorna o mínimo de:
- O número de processadores lógicos no computador.
- Se o processo estiver em execução com afinidade de CPU, o número de processadores aos quais o processo tem afinidade.
- Se o processo estiver em execução com um limite de utilização da CPU, o limite de utilização da CPU é arredondado para o próximo número inteiro.
A tabela a seguir mostra como o valor de Environment.ProcessorCount muda do .NET 5 para o .NET 6 em um computador com oito processadores lógicos.
| Ambiente | .NET 5 | .NET 6 |
|---|---|---|
| Processo afinizado para dois processadores lógicos (Windows) | oito | 2 |
| Processo com afinidade com dois processadores lógicos (Unix) | 2 | 2 |
| Utilização da CPU limitada ao equivalente a dois processadores lógicos (Windows) | oito | 2 |
| Utilização da CPU limitada ao equivalente a dois processadores lógicos (Unix) | 2 | 2 |
Versão introduzida
6,0
Motivo da alteração
Essa propriedade é frequentemente usada para determinar o fator de paralelismo para um processo. Observamos que não limitar o valor da propriedade com base na afinidade e no limite de utilização da CPU pode levar a um desempenho pior.
Ação recomendada
Revise o código que usa Environment.ProcessorCount para diminuir o fator de paralelismo com base na configuração do aplicativo ou do sistema. Mesmo que o código leve em conta a máscara de afinidade do processo ou o limite de utilização da CPU do objeto de trabalho, ele pode acabar usando um paralelismo menor do que o pretendido.
Examine o código que espera Environment.ProcessorCount retornar o número total de processadores lógicos no computador, por exemplo, para exibi-lo a um usuário. Em vez disso, você pode fazer uma chamada PInvoke para as APIs Win32 GetSystemInfo ou GetNativeSystemInfo.
Se o código apresentar um desempenho pior como resultado dessa alteração, você poderá usar a variável de ambiente DOTNET_PROCESSOR_COUNT para sobrepor o número de processadores considerados disponíveis pelo runtime do .NET e relatados pela propriedade Environment.ProcessorCount. Por exemplo, se você definir DOTNET_PROCESSOR_COUNT como 4, Environment.ProcessorCount desconsiderará qualquer afinidade de processo e limite de utilização da CPU e retornará 4. Para imitar o comportamento do .NET 5, defina a variável de ambiente como %NUMBER_OF_PROCESSORS%.