2011-08-03 15 views

Respuesta

11
var searcher = new ManagementObjectSearcher(
      "select MaxClockSpeed from Win32_Processor"); 
foreach (var item in searcher.Get()) 
{ 
     var clockSpeed = (uint)item["MaxClockSpeed"]; 
} 

si desea obtener otros campos miran clase Win32_processor

+0

Funciona bien: D Recibo la frecuencia en Hz – Orpheo

+0

¿Esperaba que estuviera en Ghz? –

+1

parece volver en MHz MaxClockSpeed ​​ Tipo de datos: uint32 Tipo de acceso: Sólo lectura Calificadores: Unidades (megahercios) – kenny

5

probar este código

using System.Management; 

uint currentsp , Maxsp; 
public void CPUSpeed() 
{ 
    using(ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'")) 
    { 
     currentsp = (uint)(Mo["CurrentClockSpeed"]); 
     Maxsp = (uint)(Mo["MaxClockSpeed"]); 
    } 
} 

que obtienen de Here

+1

'CurrentClockSpeed' suena como el actual, no el máximo :) – Matten

+1

debe usar una declaración de eliminación. using (ManagementObject Mo = new ManagementObject ("Win32_Processor.DeviceID = 'CPU0'")) {...} – nakhli

+3

@Matten simplemente reemplace CurrentClockSpeed ​​por MaxClockSpeed ​​y ha terminado – nakhli

2

Uno podría tomar la información del registro, pero sé si funciona en Windows XP o más (el mío es Windows 7).

HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/CentralProcessor/0/ProcessorName 

se lee como

Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz 

para mí.

Algo así como el código podría recuperar la información (no probado):

RegistryKey processor_name = Registry.LocalMachine.OpenSubKey(@"Hardware\Description\System\CentralProcessor\0", RegistryKeyPermissionCheck.ReadSubTree); 


if (processor_name != null) 
{ 
    if (processor_name.GetValue("ProcessorNameString") != null) 
    { 
    string value = processor_name.GetValue("ProcessorNameString"); 
    string freq = value.Split('@')[1]; 
    ... 
    } 
} 

(fuente: here)

1

Puedes obtenerlo a través de WMI, pero es bastante lento, así que si vas a tenerlo en más de una ocasión, te sugiero que lo guardes en caché. ke:

namespace Helpers 
{ 
    using System.Management; 

    public static class HardwareHelpers 
    { 
     private static uint? maxCpuSpeed = null; 
     public static uint MaxCpuSpeed 
     { 
      get 
      { 
       return maxCpuSpeed.HasValue ? maxCpuSpeed.Value : (maxCpuSpeed = GetMaxCpuSpeed()).Value; 
      } 
     } 

     private static uint GetMaxCpuSpeed() 
     { 
      using (var managementObject = new ManagementObject("Win32_Processor.DeviceID='CPU0'")) 
      { 
       var sp = (uint)(managementObject["MaxClockSpeed"]); 

       return sp; 
      } 
     } 
    } 
} 
Cuestiones relacionadas