gpt4 book ai didi

c# - 使用 TimeStamp_Sys100NS 的负 CPU 使用率

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:02 24 4
gpt4 key购买 nike

我看过WMI, negative CPU usage value and Timestamp_Sys100NS in past但我没有对启动时间做任何事情,只有两次读数之间的增量时间。

当 CPU 使用率非常低时,即系统空闲进程显示为 99%,我得到负 CPU 使用率读数。

我已经从 MSDN 文章中改编了代码和公式,但不知道为什么它可能是错误的。

http://msdn.microsoft.com/en-us/library/aa392397%28VS.85%29.aspx

底部注释掉的行只给我 0 或 100 的结果,我认为这是因为整数舍入或类似的东西,所以我在除法之前将它分成不同的部分作为 double 。

        ulong N1 = 0;
ulong D1 = 0;
ulong N2 = 0;
ulong D2 = 0;

ManagementScope scope = new ManagementScope("\\\\" + Machine + "\\root\\cimv2");
scope.Connect();

WqlObjectQuery wqlQuery = new WqlObjectQuery("SELECT PercentProcessorTime, TimeStamp_Sys100NS FROM Win32_PerfRawData_PerfOS_Processor Where Name = '_Total'");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, wqlQuery);

foreach (ManagementObject proc in searcher.Get())
{
N1 = ulong.Parse(proc.Properties["PercentProcessorTime"].Value.ToString());
D1 = ulong.Parse(proc.Properties["TimeStamp_Sys100NS"].Value.ToString());
}

System.Threading.Thread.Sleep(500);

foreach (ManagementObject proc in searcher.Get())
{
N2 = ulong.Parse(proc.Properties["PercentProcessorTime"].Value.ToString());
D2 = ulong.Parse(proc.Properties["TimeStamp_Sys100NS"].Value.ToString());
}


double cpu = N2 - N1;
double time = D2 - D1;
var x = (1 - (cpu / time)) * 100;
//var x = (1 - ((N2 - N1) / (D2 - D1))) * 100;
context.Response.Write(x);

最佳答案

我遇到了完全相同的问题,我在示例中使用的是 Perl,但您在下面看到的逻辑是相同的,我使用了 that Microsoft document 中描述的公式.

$average = (1 - ( ($n2-$n1) / ($d2-$d1) ) ) * 100;

我尝试了好几天来解决这个问题,但最后我只是选择了最明显的解决方案:

if ($average <0) { $average = 0; }

最后,如果 CPU 非常低,没人会真正关心。就我而言,我一直在寻找负载峰值和远程负载。也许您对我不知道的小变化感兴趣,对我来说 1% 或 0% 完全一样。

关于c# - 使用 TimeStamp_Sys100NS 的负 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11538640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com