【问题标题】:Get CPU Multi-Core Usage in Visual C#在 Visual C# 中获取 CPU 多核使用情况
【发布时间】:2012-07-04 17:38:34
【问题描述】:

一直在寻找这个,希望有人能回答我的问题。因此,我试图找到获得 2 或 4 个核心的 平均 CPU 使用率的最佳方法。目前我正在使用一个性能计数器,据我所知,它只返回单个内核的使用情况。理想情况下,我希望它匹配或至少类似于任务管理器中的使用栏,并且我已经研究了 WMI 查询,但希望能对最佳方法进行一些澄清。我目前正在使用具有超线程的 i7,即具有“8”个内核。不知道这是否有很大的不同,但它可能会。 感谢您的任何指点

【问题讨论】:

标签: c# cpu-usage


【解决方案1】:

使用Win32_PerfFormattedData_Counters_ProcessorInformation,您可以使用PercentProcessorTime 字段,它将提供系统上每个核心/线程的实例及其各自的用法。

我刚刚在我的身上尝试过,我的 8 个线程得到了 8 个管理对象。

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_PerfFormattedData_Counters_ProcessorInformation"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_PerfFormattedData_Counters_ProcessorInformation instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("PercentProcessorTime: {0}", queryObj["PercentProcessorTime"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

更新:

这是一个小小的谎言,我得到了 10 个实例。 他们的名字是:

  1. _总计
  2. 0,_总计
  3. 0,7
  4. 0,6
  5. 0,5

等等。 您应该使用 where 子句过滤掉您需要的内容:

SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation WHERE NOT Name='_Total' AND NOT Name='0,_Total'

【讨论】:

  • 谢谢您,似乎可以正常工作,但是对于我的 8 核,为什么它显示为 10 核?干杯
  • 太棒了!非常感谢,正是我需要的:D
  • 要获得更准确的结果,请使用 Win32_PerfRawData_PerfOS_Processor 并仅搜索您需要的显式字段。对于大多数 WMI 查询,“SELECT *”的速度明显变慢。
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
  • 2017-12-04
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
  • 1970-01-01
相关资源
最近更新 更多