2011-08-03 29 views
8

CPU周波数をC#(例:2Ghz)にするにはどうすればよいですか? シンプルですが、環境変数では見つかりません。それは、Windows XPまたはそれ以前で動作する場合は、このコードを試してみてくださいCでCPU周波数を取得する方法#

+1

どの周波数を意味していますか?現在のものか最大のものか? – CodesInChaos

+0

私は最大値 – Orpheo

答えて

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

をあなたは他のフィールドを取得したい場合は、クラスWin32_processor

+0

正常に動作します:D周波数がHzで取得されます – Orpheo

+0

あなたはGhzにあることを期待していましたか? –

+1

データ型MaxClockSpeed MHz単位で返すようだ:私は 'VARのクロックスピード= 0.001f *(UINT)項目[ "MaxClockSpeed"]、それを変換するために、これをした単位(メガヘルツ) – kenny

5

:) おかげで

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

私は私が(レジストリから情報を取ることができるHere

+1

を意味します。CurrentClockSpeedは現在のものと同じように聞こえますが、最大ではありません。 – Matten

+1

あなたはdispose文を使うべきです。 – nakhli

+3

@MattenはCurrentClockSpeedをMaxClockSpeedで置き換えて完了しました – nakhli

2

一つからそれを得るが、知りません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]; 
    ... 
    } 
} 

(ソース:here

1
を見て

あなたはWMI経由で入手できますが、かなり遅いので、複数の機会にそれを取得しようとするなら、キャッシュしておくことをお勧めします。 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; 
      } 
     } 
    } 
} 
関連する問題