我已經看過WMI, negative CPU usage value and Timestamp_Sys100NS in past但我沒有做任何與兩次讀數之間的啓動時間只增量時間。使用TimeStamp_Sys100NS負CPU使用率
當CPU使用率非常低時,即System Idle Process顯示爲99%時,我得到負面的CPU使用率讀數。
我已經修改了MSDN文章中的代碼和公式,但無法分辨爲什麼它可能是錯誤的。
http://msdn.microsoft.com/en-us/library/aa392397%28VS.85%29.aspx
底部的註釋行只是給我的0或100的結果,我相信這是因爲整數四捨五入或類似的東西,所以我打破了它分成不同的部分爲分割前增加一倍。
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);
您需要爲每個單獨的處理器內核執行此操作以獲取有意義的數字。 – 2012-07-18 12:41:27
你的意思是你不能爲'_Total'運行它? – Matt 2012-07-18 14:17:51