一直在寻找这个,希望有人能回答我的问题。因此,我试图找到获得2或4个核心的平均 CPU使用率的最佳方法。目前我正在使用性能计数器,据我所知,只返回单个核心的使用情况。理想情况下,我希望它匹配或至少类似于任务管理器中的使用栏,我已经查看了WMI查询,但希望得到一些关于最佳方法的澄清。我目前正在使用i7,它具有超线程,即具有“8”核心。不确定这是否会有很大的不同,但尽管可能会有所不同。 感谢您的任何指示
答案 0 :(得分:6)
使用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个实例。 他们的名字是:
等。 你应该用where子句过滤掉你需要的东西:
SELECT PercentProcessorTime FROM Win32_PerfFormattedData_Counters_ProcessorInformation WHERE NOT Name='_Total' AND NOT Name='0,_Total'