Como posso determinar programaticamente se em multi-core, hyperthreading ou multi-processador?

StackOverflow https://stackoverflow.com/questions/1817268

Pergunta

Eu sei como obter o tipo de processador, talvez essa é a única maneira, mas eu estou realmente à procura de uma maneira de determinar a partir de um aplicativo se ele está sendo executado em um processador multi-core ou em um hyper-threading processador single-core .

(fundo: os provedores de hospedagem de alguns dos meus clientes são muito vagos sobre o que recursos que estes disponibilizem através de imagens VMWare Esta aplicação é suposto ser executado em multi-core, mas tem visto desempenho negativo desde a sua última "move".. normalmente, em multi-núcleo, um núcleo picos sobre um fio, e não a outros. por esta "multi-núcleo", os dois processadores de pico, mesmo em aplicações de um único segmento.)

Foi útil?

Solução

System.Environment.ProcessorCount que também incluirá processadores hyperthreaded. Que Vmware pode ou não pode expor. Chances são maiores que serão expostos se o processador é VT habilitado e você estiver usando um BareMetal habilitado tecnologia hypervisor.

Se você tiver XP-SP3 / win2k3 ou acima Você pode usar WMI para retirar:

Win32_ComputerSystem.NumberOfProcessors returns physical count

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count

Se os valores forem as mesmas chances são, então, o seu sistema não tem HT ou não tê-lo ativado.

Você pode começar a explorar como retirar informações WMI em .NET a partir este tutorial .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top