如何在C#中获取CPU速度和总物理RAM?

5

我需要一种简单的方式来检查主机PC的RAM和CPU速度。我尝试使用WMI,但是我正在使用的代码

 private long getCPU()
 {
    ManagementClass mObject = new ManagementClass("Win32_Processor");
    mObject.Get();
    return (long)mObject.Properties["MaxClockSpeed"].Value;

 }

抛出空引用异常。此外,WMI查询有点慢,我需要进行几次查询才能获取所有规格。有更好的方法吗?

3个回答

6

不确定“ManagementObject”类是否是最佳选择,因为它取决于Windows管理工具服务。如果服务停止或未运行,则您的代码将无法按预期工作。我更喜欢性能计数器方法,但是想知道使用ManagementObject的普遍程度如何? - Bharath K

2
您应该在System.Diagnostics中使用PerformanceCounter类。
PerformanceCounter cpuCounter;
PerformanceCounter ramCounter;

cpuCounter = new PerformanceCounter();

cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";

ramCounter = new PerformanceCounter("Memory", "Available MBytes");


public string getCurrentCpuUsage(){
            cpuCounter.NextValue()+"%";
}

public string getAvailableRAM(){
            ramCounter.NextValue()+"MB";
}

3
这段代码没有定义处理器和内存的数量。它展示了当前有多少内存(处理器)可用(已使用)。 - Pavel Belousov

1

关于处理器的许多信息,包括其以Mhz为单位的速度,都可以在HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor下找到。

我正在运行两台Win7x64电脑,但由于某种原因,第一次运行代码时WMI查询显示的数字比较模糊,而第二次运行则显示了正确的处理器速度?

就性能计数器而言,我确实使用了很多网络计数器,并得出了准确的结果,最终不得不找到更好的解决方案,所以我不信任它们!


您提到最终使用了不同的解决方案来监控网络计数器。不介意分享一下最终使用的是什么吗? - Jim Scott
嘿@JimScott,哈哈,这真的是一个相当陈旧的故事。该应用程序作为其工作的一部分执行了一些带宽监控。我发现性能计数器**网络方面有时存在问题,并写了一些东西以在多次调用后给我平均值。希望这能帮到您的情况。 - gideon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接