每个核心的WMI CPU负载和总数似乎不正确

问题描述 投票:0回答:1

我知道如何获得CPU负载(每个核心和总数)的问题,有几十个教程或代码片段。

但是让我怀疑的是什么:

  1. 总CPU使用率与任务管理器中的值不匹配(除了值大多为0,其中任务管理器显示10到20%之间的值)
  2. 如前所述,总CPU使用率大多为0%,而第一个内核的值显示为19%。

在图片上,您可以在左侧看到我的输出,在右侧看到任务管理器。所以我希望_Total(根据任务管理器)的值为13%,而不是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}";
        }
    }
}

UPDATE

使用perf计数器我已经尝试过,因此WMI和perf计数器(各种计数器)没有提供所需的值。但Windows下有性能监视器(Win + R,perfmon,Enter)。在这里,您可以在“处理器信息”下找到“处理器负载”指示器。我并不是指“处理器时间(%)”。该值至少最接近任务管理器显示的值。但我无法弄清楚如何检索它。 (我使用德语Windows,已经尝试将其设置为英语,但计数器保留了德语名称,否则我会看到计数器用英语调用(至少在Windows中))。

但是,“处理器负载”或“处理器使用”没有找到任何东西。并且还显示类别处理器信息的计数器不显示该特定计数器。所以它必须是从几个计数器本身计算的东西。

c# wpf wmi cpu cpu-usage
1个回答
0
投票
public int GetCPUUsage()
{
    var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total", Environment.MachineName);
    cpuCounter.NextValue();
    System.Threading.Thread.Sleep(1000);
    return (int)cpuCounter.NextValue();
}

我一直在使用它...它似乎匹配任务管理器总CPU值。

© www.soinside.com 2019 - 2024. All rights reserved.