¿Cómo puedo determinar programáticamente si en multi-core, hyperthreading o multiprocesador?

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

Pregunta

Sé cómo obtener el tipo de procesador, tal vez esa es la única forma, pero en realidad estoy buscando una forma de determinar a partir de una aplicación si se está ejecutando en un procesador multinúcleo o en un procesador de un solo núcleo hiper-threading .

(antecedentes: los proveedores de alojamiento de algunos de mis clientes son muy imprecisos acerca de los recursos que ponen a disposición a través de las imágenes de VMWare. Se supone que esta aplicación se ejecuta en varios núcleos, pero ha visto un rendimiento perjudicial desde su último "movimiento". Normalmente, en núcleos múltiples, picos de un núcleo en un hilo, y no en el otro. En este '' núcleo múltiple '', ambos picos de procesadores, incluso en aplicaciones de un solo hilo.)

¿Fue útil?

Solución

System.Environment.ProcessorCount, que también incluirá procesadores hiperprocesados. Qué Vmware puede o no exponer. Es más probable que quede expuesto si el procesador está habilitado para VT Y está utilizando una tecnología de hipervisor habilitado para metal desnudo.

Si tiene XP-SP3 / WIN2k3 o superior Puede usar WMI para extraer:

Win32_ComputerSystem.NumberOfProcessors returns physical count

Win32_ComputerSystem.NumberOfLogicalProcessors returns logical count

Si los valores son los mismos, entonces es probable que su sistema no tenga HT o no lo tenga habilitado.

Puede comenzar a explorar cómo extraer información de WMI en .NET desde este tutorial .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top