Мне нравится решение Джеффа, но я хотел получить среднее.Было несколько проблем с загрузкой процессора, которые, казалось, должны были быть легко решаемыми, но я их не видел.
Во-первых, конечно, значение 0 в первом запросе бесполезно.Поскольку вы уже знаете, что первый ответ равен 0, почему функция не учитывает это и возвращает true .NextValue ()?
Вторая проблема заключается в том, что мгновенное чтение может быть крайне неточным при попытке принять решение о том, какие ресурсы могут быть доступны вашему приложению, поскольку оно может быть скачком или между скачками.
Мое решение состояло в том, чтобы сделать цикл for, который циклически проходит и дает вам среднее значение за последние несколько секунд.Вы можете настроить счетчик так, чтобы он был короче или длиннее (если он больше 2).
public static float ProcessorUtilization;
public static float GetAverageCPU()
{
PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName);
for (int i = 0; i < 11; ++i)
{
ProcessorUtilization += (cpuCounter.NextValue() / Environment.ProcessorCount);
}
// Remember the first value is 0, so we don't want to average that in.
Console.Writeline(ProcessorUtilization / 10);
return ProcessorUtilization / 10;
}