C# 每个内核的WMI CPU负载和总计似乎不正确

C# 每个内核的WMI CPU负载和总计似乎不正确,c#,wpf,wmi,cpu,cpu-usage,C#,Wpf,Wmi,Cpu,Cpu Usage,我知道关于如何获得CPU负载(每个内核和总负载)的问题,有很多教程或代码片段 但让我怀疑的是: CPU总使用量与任务管理器中的值不匹配(除此之外,该值大多为0,其中任务管理器显示的值介于10和20%之间) 如前所述,总CPU使用率大多为0%,而第一个内核的值显示为19% 在图中,您可以在左侧看到我的输出,在右侧看到任务管理器。 因此,我预计_Total的值为13%(根据Task Manager),而不是1%。 我不太清楚为什么一个内核有6%,而另一个内核有12%,却显示1% 这是我的代码: p

我知道关于如何获得CPU负载(每个内核和总负载)的问题,有很多教程或代码片段

但让我怀疑的是:

  • CPU总使用量与任务管理器中的值不匹配(除此之外,该值大多为0,其中任务管理器显示的值介于10和20%之间)
  • 如前所述,总CPU使用率大多为0%,而第一个内核的值显示为19%
  • 在图中,您可以在左侧看到我的输出,在右侧看到任务管理器。 因此,我预计_Total的值为13%(根据Task Manager),而不是1%。 我不太清楚为什么一个内核有6%,而另一个内核有12%,却显示1%

    这是我的代码:

    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}";
            }
        }
    }
    
    更新

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

    但对于“处理器负载”或“处理器使用率”,什么也找不到。并且显示类别处理器信息的计数器也不会显示特定计数器。所以它一定是从几个计数器本身计算出来的

    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值相匹配


    我一直在用这个。。。它似乎与任务管理器的总CPU值相匹配。

    对我来说很有效。大多数情况下,当WMI不能按预期工作时,这是一个硬件问题,就像旧的bios一样。我使用该工具执行代码。除了为您生成代码外,它还允许在命令提示符下直接执行代码。也许你可以从那里试试。@BionicCode电脑是新安装的,所有驱动程序都是最新的,BIOS也是最新的。但在重新安装之前,我已经遇到了问题。我已经知道代码创建者,但在这里我得到了“错误的值”。但我想我读到任务管理器使用WMI,还是我错了?如果我错了,任务管理器使用什么?对我有用。大多数情况下,当WMI不能按预期工作时,这是一个硬件问题,就像旧的bios一样。我使用该工具执行代码。除了为您生成代码外,它还允许在命令提示符下直接执行代码。也许你可以从那里试试。@BionicCode电脑是新安装的,所有驱动程序都是最新的,BIOS也是最新的。但在重新安装之前,我已经遇到了问题。我已经知道代码创建者,但在这里我得到了“错误的值”。但我想我读到任务管理器使用WMI,还是我错了?如果我错了,任务管理器使用什么?更新线程以回答您的评论。谢谢你在任何情况下的帮助,但不幸的是我没有得到想要的结果。更新了线程以回答你的评论。无论如何谢谢你的帮助,但不幸的是我没有得到想要的结果。