2011-08-03 24 views
8

CPU frekansında C# nasıl elde edebilirim (örnek: 2Ghz)? Bu basit ama ortam değişkenlerinde bulamıyorum. Windows XP veya daha eski çalışıp çalışmadığını bu kodu deneyinCPU frekansı nasıl elde edilir C#

+1

Hangi sıklıkta? Geçerli olan mı, maksimum mu? – CodesInChaos

+0

En yüksek – Orpheo

cevap

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

diğer alanlar sınıfında bakmak almak istiyorsanız Win32_processor

+0

İyi çalışıyor: D Sıklığı Hz – Orpheo

+0

'dan aldım. Ghz'de olmasını mı bekliyordun? –

+1

MHz dönmek gibi görünüyor Veri türü MaxClockSpeed: uint32 Erişim türü: Salt okunur Elemeleri: Birimler (Megahertz) – kenny

5

:) Teşekkür

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"]); 
    } 
} 

ben bana ait (kayıt dışına bilgi alabilir Here

+1

'CurrentClockSpeed' gibi mevcut olanı kastediyorum, maksimum değil :) – Matten

+1

bir atıf ifadesi kullanmalısınız. using (ManagementObject Mo = new ManagementObject ("Win32_Processor.DeviceID = 'CPU0'")) {...} – nakhli

+3

@Matten sadece CurrentClockSpeed'i MaxClockSpeed ​​ile değiştirin ve işiniz bittiğinde – nakhli

2

One adresinden elde ama bilmiyorum Windows 7).

HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/CentralProcessor/0/ProcessorName 

benim için

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

gibi okur.

bilgi (test) geri alabilirsem bu kodu gibi

şey:

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

(kaynak: here)

1

WMI üzerinden alabilirsiniz, ancak çok yavaştır, bu yüzden birden fazla vesileyle alıyorsanız, önbelleğe almanızı öneririm - 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; 
      } 
     } 
    } 
} 
İlgili konular