Возврат использования ЦП в WMI с помощью C#

чтобы вернуть использование ЦП с помощью WMI, я возвращаю PercentProcessorTime из Win32_PerfFormattedData_PerfOS_Processor? Если нет, то на какой класс мне следует обратить внимание? Спасибо.

2 ответов


ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor");
foreach (ManagementObject obj in searcher.Get())
{
    var usage = obj["PercentProcessorTime"];
    var name = obj["Name"];
    Console.WriteLine(name +" : " + usage);
}

и для любителей Linq

ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor");
var cpuTimes = searcher.Get()
    .Cast<ManagementObject>()
    .Select(mo => new
        {
            Name = mo["Name"],
            Usage = mo["PercentProcessorTime"]
        }
    )
    .ToArray();

похоже, что информация также доступен в WMI здесь:

"select LoadPercentage from Win32_Processor"

"емкость нагрузки каждого процессора, усредненная до последней секунды. Загрузка процессора относится к общей вычислительной нагрузке для каждого процессора в одном время."

или:

"select LoadPercentage from CIM_Processor"

"загрузка процессора, усредненная за последнюю минуту, в процентах."

или:

"select PercentProcessorTime from Win32_PerfFormattedData_PerfOS_Processor" также, кажется, работает.


Примечание: они часто возвращают несколько результатов на ядро процессора и должны быть суммированы, чтобы получить общее использование процессора для системы в целом, поэтому ищите это.

этот вопрос и ответ действительно имеет больше общего с WMI, так как получение информации от WMI с C# - это действительно другой вопрос и должно быть очень похоже на любой запрос WMI в C#.