Загрузка процессора WMI на ядро ​​и общее количество, кажется, не правильно - PullRequest
0 голосов
/ 20 марта 2019

Я знаю по вопросу о том, как получить нагрузку на процессор (на ядро ​​и всего), существуют десятки учебных пособий или фрагментов кода.

Но что вызывает у меня подозрения:

  1. Общее использование ЦП не соответствует значению в диспетчере задач (кроме того, в большинстве случаев это 0, где диспетчер задач отображает значения от 10 до 20%)
  2. Как уже упоминалось, общее использование ЦПв основном 0%, тогда как значение 1-го ядра показывает, например, 19%.

На рисунке вы видите мой вывод с левой стороны и диспетчер задач с правой стороны.Поэтому я ожидаю значение 13% для _Total (согласно диспетчеру задач), а не 1%.И почему отображается 1%, хотя одно ядро ​​имеет 6%, а остальные 12% мне не совсем понятно.

Вот мой код:

public SystemStatsViewModel() {
    TimerThread = new Thread(new ThreadStart(TimerThreadMethod))
    {
        Name = "TimerThread",
        IsBackground = true
    };
    TimerThread.Start();
}

private void TimerThreadMethod()
{
    var cpuSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_PerfFormattedData_Counters_ProcessorInformation WHERE Name LIKE '0%'");
    string cpuString;
    while (true)
    {
        cpuString = "";
        foreach (var obj in cpuSearcher.Get())
        {
            cpuString += $"{obj["Name"]}: {obj["PercentProcessorTime"]}{Environment.NewLine}";
        }
    }
}

ОБНОВЛЕНИЕ

С счетчиками производительности, которые я уже пробовал, таким образом, счетчики WMI и производительности (различные счетчики) не дали желаемого значения.Но под самой Windows есть монитор производительности (Win + R, perfmon, Enter).Здесь вы можете найти индикатор «загрузка процессора» в разделе «информация о процессоре».И я НЕ имею в виду «время процессора (%)».Значение, по крайней мере, ближе всего к значению, отображаемому диспетчером задач.Но я пока не мог понять, как его найти.(Я использую немецкую Windows, уже пытался установить ее на английский, но счетчики остаются с немецкими именами, иначе я бы видел, как счетчик называется на английском (по крайней мере, в Windows)).

Но с «загрузкой процессора» или «использованием процессора» ничего не найдено.А также отображение счетчиков информации о категории процессора не показывает этот конкретный счетчик.Так что это должно быть что-то, что вычисляется из нескольких счетчиков.

1 Ответ

0 голосов
/ 21 марта 2019
public int GetCPUUsage()
{
    var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", Environment.MachineName);
    cpuCounter.NextValue();
    System.Threading.Thread.Sleep(1000);
    return (int)cpuCounter.NextValue();
}

Я использовал это ... Похоже, что общее значение ЦП диспетчера задач.

...