一直在寻找这个,希望这里有人可以回答我的问题。因此,我试图找到获得 2 个或 4 个内核的平均CPU 使用率的最佳方法。目前我正在使用性能计数器,据我所知,它只返回单个内核的使用情况。理想情况下,我希望它匹配或至少类似于任务管理器中的使用栏,并且我已经研究了 WMI 查询,但希望能对最佳方法进行一些澄清。我目前正在使用具有超线程的 i7,即具有“8”个内核。不知道这是否有很大的不同,但它可能会。感谢您的任何指点
问问题
3541 次
1 回答
7
使用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 个实例。他们的名字是:
- _全部的
- 0,_总计
- 0,7
- 0,6
- 0,5
等等。您应该使用 where 子句过滤掉您需要的内容:
SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation WHERE NOT Name='_Total' AND NOT Name='0,_Total'
于 2012-07-04T08:37:47.857 回答