2

ここから次のコードを見つけました"http://www.boyet.com/Articles/CodeFromInternet.html "
。CPUの速度をGHzで返しますが、32ビットWindowsでのみ機能します。

using System;
using System.Management;

namespace CpuSpeed
{
    class Program
    {
        static double? GetCpuSpeedInGHz()
        {
            double? GHz = null;
            using (ManagementClass mc = new ManagementClass("Win32_Processor"))
            {
                foreach (ManagementObject mo in mc.GetInstances())
                {
                    GHz = 0.001 * (UInt32) mo.Properties["CurrentClockSpeed"].Value;
                    break;
                }
            }
            return GHz;
        }

        static void Main(string[] args)
        {
            Console.WriteLine("The current CPU speed is {0}", (GetCpuSpeedInGHz() ?? -1.0).ToString());
            Console.ReadLine();
        }
    }
}


64ビット管理クラスを検索しましたが、成功しませんでした。
64ビットWindowsでCPU速度を取得する他の方法はありますか?

4

3 に答える 3

6

以下のコードでうまくいくはずです

  RegistryKey registrykeyHKLM = Registry.LocalMachine;
  string keyPath = @"HARDWARE\DESCRIPTION\System\CentralProcessor\0";
  RegistryKey registrykeyCPU = registrykeyHKLM.OpenSubKey(keyPath, false);
  string MHz = registrykeyCPU.GetValue("~MHz").ToString();
  string ProcessorNameString = (string)registrykeyCPU.GetValue("ProcessorNameString");
  registrykeyCPU.Close();
  registrykeyHKLM.Close();
  Console.WriteLine("{0} MHz for {1}", MHz, ProcessorNameString);
于 2008-12-11T14:42:42.307 に答える
0

Binoj が提供する回答のより単純なバージョンは次のようになります。これにより、CPU の最大クロック速度が返されます。マシンで利用可能な合計サイクルが必要な場合は、この値に を掛ける必要があることに注意してくださいEnvironment.ProcessorCount

private float GetCpuClockSpeed()
{
    return (int) Registry.GetValue(@"HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "~MHz", 0);
}
于 2011-08-17T15:50:58.900 に答える
-1

最初のCPU/コアだけでなく、各CPU/コアの速度を返すBinojAntonyの回答に基づいて、次のコードを使用しました。

Microsoft.Win32.RegistryKey registrykeyHKLM = Microsoft.Win32.Registry.LocalMachine;
string cpuPath = @"HARDWARE\DESCRIPTION\System\CentralProcessor";
Microsoft.Win32.RegistryKey registrykeyCPUs = registrykeyHKLM.OpenSubKey(cpuPath, false);
StringBuilder sbCPUDetails = new StringBuilder();
int iCPUCount;
for (iCPUCount = 0; iCPUCount < registrykeyCPUs.SubKeyCount; iCPUCount++)
{
    Microsoft.Win32.RegistryKey registrykeyCPUDetail = registrykeyHKLM.OpenSubKey(cpuPath + "\\" + iCPUCount, false);
    string sMHz = registrykeyCPUDetail.GetValue("~MHz").ToString();
    string sProcessorNameString = registrykeyCPUDetail.GetValue("ProcessorNameString").ToString();
    sbCPUDetails.Append(Environment.NewLine + "\t" + string.Format("CPU{0}: {1} MHz for {2}", new object[] { iCPUCount, sMHz, sProcessorNameString }));
    registrykeyCPUDetail.Close();
}
registrykeyCPUs.Close();
registrykeyHKLM.Close();
sCPUSpeed = iCPUCount++ + " core(s) found:" + sbCPUDetails.ToString();

必要に応じて自由にカスタマイズしてください。

于 2009-03-16T14:54:59.063 に答える