【问题标题】:How do I get the CPU speed and total physical ram in C#?如何在 C# 中获得 CPU 速度和总物理内存?
【发布时间】:2010-06-10 18:14:46
【问题描述】:

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

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

 }

引发空引用异常。此外,WMI 查询有点慢,我需要做一些才能获得所有规格。有没有更好的办法?

【问题讨论】:

    标签: c# wmi system


    【解决方案1】:

    http://dotnet-snippets.com/dns/get-the-cpu-speed-in-mhz-SID575.aspx

    using System.Management;
    
    public uint CPUSpeed()
    {
      ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");
      uint sp = (uint)(Mo["CurrentClockSpeed"]);
      Mo.Dispose();
      return sp;
    }
    

    RAM 可以在这个 SO 问题中找到:How do you get total amount of RAM the computer has?

    【讨论】:

    • 不确定“ManagementObject”类是否是最好的方法,因为它依赖于 Windows Management Instrumentation 服务。如果服务停止或未运行,您的代码将无法按预期工作。我更喜欢性能计数器方法,但想知道 ManagementObject 的普遍使用情况如何?
    【解决方案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";
    }
    

    【讨论】:

    • 此代码未定义处理器和 RAM 数量。它显示了现在有多少 RAM(处理器)可用(使用)。
    【解决方案3】:

    HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor 下提供了有关处理器的许多信息,包括其速度(以 Mhz 为单位)

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

    在性能计数器方面,我确实对网络计数器进行了很多工作并获得了准确的结果,最终不得不找到更好的解决方案,所以我不相信他们!

    【讨论】:

    • 您提到您最终使用了不同的解决方案来监控网络计数器。你介意分享一下你最终使用的东西吗?
    • 嘿@JimScott,哈哈,真是个老故事了。作为其工作的一部分,该应用程序进行了一些带宽监控。我相信我注意到 for network 的性能计数器在瞬时情况下关闭,并写了一些东西,随着时间的推移,我平均可以进行多次调用。希望对您有所帮助。
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 2018-02-09
    • 2014-05-05
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2019-01-25
    相关资源
    最近更新 更多