Detectando la cantidad de procesadores

¿Cómo se detecta la cantidad de procesadores / núcleos físicos en .net?

Si bien Environment.ProcessorCount realmente le proporcionará la cantidad de procesadores virtuales en el sistema, esa puede no ser la cantidad de procesadores disponibles para su proceso. Arreglé una pequeña clase / propiedad estática para obtener exactamente eso:

 using System; using System.Diagnostics; ///  /// Provides a single property which gets the number of processor threads /// available to the currently executing process. ///  internal static class ProcessInfo { ///  /// Gets the number of processors. ///  /// The number of processors. internal static uint NumberOfProcessorThreads { get { uint processAffinityMask; using (var currentProcess = Process.GetCurrentProcess()) { processAffinityMask = (uint)currentProcess.ProcessorAffinity; } const uint BitsPerByte = 8; var loop = BitsPerByte * sizeof(uint); uint result = 0; while (--loop > 0) { result += processAffinityMask & 1; processAffinityMask >>= 1; } return (result == 0) ? 1 : result; } } } 

Environment.ProcessorCount también incluirá cualquier procesador hyperthreaded.

No hay forma (al menos hasta Windows 2003) para distinguir un procesador de hyperthreaded de uno con dos núcleos.

Esto realmente varía bastante dependiendo de la plataforma objective. La respuesta de Stephbu funcionará muy bien en XP SP3 y más reciente.

Si se dirige a plataformas más antiguas, le recomendamos que consulte este artículo . Lo escribí hace aproximadamente medio año y en él analizo varias formas diferentes de hacerlo, así como los pros y los contras individuales de cada método.

También puede consultar este artículo de proyecto de código si está interesado en diferenciar los núcleos de sombra de hyperthreading de los reales.

System.Environment.ProcessorCount es lo que necesita

Environment.ProcessorCount

EDITAR: disponible en .NET 2.0, no en .NET 1.1

No tiene suficientes representantes para la wiki, pero tenga en cuenta que, además de XPSP2, Windows 2003 Server SP1 y SP2 también necesitan una revisión para habilitar esta funcionalidad:

http://support.microsoft.com/kb/932370

Puede usar PowerShell para acceder a la información completa del procesador. Por ejemplo, puede ejecutar el siguiente comando para obtener la cantidad de núcleos de CPU:

 Get-WmiObject -namespace root\CIMV2 -class Win32_Processor -Property NumberOfCores 

Es mucho más fácil investigar WMI cuando se utiliza algún tipo de herramienta de exploración. Por lo tanto, puedo sugerir el uso de la herramienta de navegación WMI (por ejemplo, WMIExplorer o WMI CIM Studio ) para explorar clases, propiedades y métodos de WMI.