Как получить частоту процессора в C # - PullRequest
8 голосов
/ 03 августа 2011

Как я могу получить в c # частоту процессора (пример: 2 ГГц)? Это просто, но я не нахожу это в переменных среды. Спасибо:)

Ответы [ 4 ]

12 голосов
/ 03 августа 2011
 var searcher = new ManagementObjectSearcher(
            "select MaxClockSpeed from Win32_Processor");
 foreach (var item in searcher.Get())
 {
      var clockSpeed = (uint)item["MaxClockSpeed"];
 }

если вы хотите получить другие поля, посмотрите на класс Win32_processor

5 голосов
/ 03 августа 2011

Попробуйте этот код

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"]);
   }
}
2 голосов
/ 03 августа 2011

Можно вынести информацию из реестра, но не знаю, работает ли она на Windows XP или более ранней версии (у меня Windows 7).

HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/CentralProcessor/0/ProcessorName 

читается как

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

для меня.

Что-то вроде этого кода может получить информацию (не проверено):

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

(источник: здесь )

1 голос
/ 03 августа 2011

Вы можете получить его через WMI, но он довольно медленный, поэтому, если вы собираетесь получать его несколько раз, я бы посоветовал вам его кешировать - что-то вроде:

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