C# 每个内核的WMI CPU负载和总计似乎不正确
我知道关于如何获得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
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,还是我错了?如果我错了,任务管理器使用什么?更新线程以回答您的评论。谢谢你在任何情况下的帮助,但不幸的是我没有得到想要的结果。更新了线程以回答你的评论。无论如何谢谢你的帮助,但不幸的是我没有得到想要的结果。