How to get CPU frequency in c#

前端 未结 5 645
自闭症患者
自闭症患者 2020-12-03 09:17

How can I get in c# the CPU frequency (example : 2Ghz) ? It\'s simple but I don\'t find it in the environnement variables. Thanks :)

相关标签:
5条回答
  • 2020-12-03 09:25

    One could take the information out of the registry, but dunno if it works on Windows XP or older (mine is Windows 7).

    HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/CentralProcessor/0/ProcessorName 
    

    reads like

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

    for me.

    Something like this code could retrieve the information (not tested):

    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];
        ...
      }
    }
    

    (source: here)

    0 讨论(0)
  • 2020-12-03 09:30

    If you want to get the turbo speed, you can make use of the "% Processor Performance" performance counter and multiply it with the WMI "MaxClockSpeed" as follows:

    private string GetCPUInfo()
    {
      PerformanceCounter cpuCounter = new PerformanceCounter("Processor Information", "% Processor Performance", "_Total");
      double cpuValue = cpuCounter.NextValue();
    
      Thread loop = new Thread(() => InfiniteLoop());
      loop.Start();
    
      Thread.Sleep(1000);
      cpuValue = cpuCounter.NextValue();
      loop.Abort();
    
      foreach (ManagementObject obj in new ManagementObjectSearcher("SELECT *, Name FROM Win32_Processor").Get())
      {
        double maxSpeed = Convert.ToDouble(obj["MaxClockSpeed"]) / 1000;
        double turboSpeed = maxSpeed * cpuValue / 100;
        return string.Format("{0} Running at {1:0.00}Ghz, Turbo Speed: {2:0.00}Ghz",  obj["Name"], maxSpeed, turboSpeed);
      }
    
      return string.Empty;
    }
    

    The InfiniteLoop method is simply an integer that gets 1 added and subtracted:

    private void InfiniteLoop()
    {
      int i = 0;
    
      while (true)
        i = i + 1 - 1;
    }
    

    The InfiniteLoop method is just added to give the CPU something to do and turbo in the process. The loop is allowed to run for a second before the next value is taken and the loop aborted.

    0 讨论(0)
  • 2020-12-03 09:36

    You can get it via WMI, but it's quite slow so if you're going to be getting it on more than one occasion I'd suggest you cache it - something like:

    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;
                }
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-03 09:43

    Try this code

    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"]);
       }
    }
    
    0 讨论(0)
  • 2020-12-03 09:44
     var searcher = new ManagementObjectSearcher(
                "select MaxClockSpeed from Win32_Processor");
     foreach (var item in searcher.Get())
     {
          var clockSpeed = (uint)item["MaxClockSpeed"];
     }
    

    if you wish to get other fields look at class Win32_processor

    0 讨论(0)
提交回复
热议问题