You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WMI或编程方式获取任务管理器中的CPU当前速度而非最大速度

我懂你要的是任务管理器里那个实时跳动的当前CPU运行速度,不是固定的最大睿频或者基准频率对吧?之前查WMI没找到合适的方法,大概率是没找对对应的类——毕竟Win32_Processor里的很多属性都是静态的基准值,不是实时动态数据。下面给你几个靠谱的实现方式,不管是用WMI还是直接调用API都能搞定:

一、用WMI获取实时CPU当前速度

别再盯着Win32_Processor啦,试试性能计数器相关的WMI类,这才是任务管理器背后用的数据源:

1. 直接用格式化后的性能数据类

Win32_PerfFormattedData_Counters_ProcessorInformation这个类已经帮我们处理好实时计算后的频率值,直接取ProcessorFrequency属性就可以。用PowerShell测试的话,一行代码就能看到结果:

Get-CimInstance Win32_PerfFormattedData_Counters_ProcessorInformation | Select-Object Name, ProcessorFrequency

返回的ProcessorFrequency就是每个逻辑核心的实时运行频率(单位MHz),和任务管理器里标注1的数值完全一致。

2. 用原始性能数据类(进阶)

如果需要自己处理原始数据做更精细的监控,可以用Win32_PerfRawData_Counters_ProcessorInformation,里面的ProcessorFrequency是原始采样值,ProcessorFrequency_Base是基准参考值,不过一般用上面的格式化类就足够了。

二、用C#/.NET直接调用性能计数器

如果是.NET开发,用System.Diagnostics.PerformanceCounter类更直接,和WMI用的是同一个数据源:

using System;
using System.Diagnostics;

class CpuFreqReader
{
    static void Main()
    {
        // 获取所有核心的总当前频率
        var totalCounter = new PerformanceCounter("Processor Information", "Processor Frequency", "_Total");
        // 第一次调用可能返回0,建议调用两次并短暂等待
        totalCounter.NextValue();
        System.Threading.Thread.Sleep(100);
        float totalFreq = totalCounter.NextValue();
        Console.WriteLine($"当前CPU总运行频率:{totalFreq:F1} MHz");

        // 遍历每个逻辑核心获取单独的频率
        foreach (string instance in new PerformanceCounterCategory("Processor Information").GetInstanceNames())
        {
            var coreCounter = new PerformanceCounter("Processor Information", "Processor Frequency", instance);
            coreCounter.NextValue();
            System.Threading.Thread.Sleep(50);
            float coreFreq = coreCounter.NextValue();
            Console.WriteLine($"核心 {instance} 当前频率:{coreFreq:F1} MHz");
        }
    }
}

三、用C++调用Windows API

如果是原生C++开发,可以通过性能计数器API来获取同样的数值,步骤大概是:

  1. 用PdhOpenQuery打开一个性能查询会话
  2. 用PdhAddCounter添加计数器路径"\\Processor Information(*)\\Processor Frequency"
  3. 用PdhCollectQueryData收集数据,再用PdhGetFormattedCounterValue解析出当前频率值

这个方法稍微繁琐一点,但适合需要高性能监控的场景。

补充一句:之前你查WMI没找到,主要是因为很多资料只介绍了Win32_Processor,但这个类的CurrentClockSpeed其实是CPU的基准频率(也就是出厂时的默认固定频率),不是动态调整的实时速度,而上面的方法都是直接获取任务管理器用的实时性能数据,肯定能拿到你要的数值。

内容的提问来源于stack exchange,提问作者yancyli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:22:09