Dies ist meine Funktion zum Aufzählen von Prozessen in Windows-Box und Berechnung der prozentualen CPU-Auslastung für jeden Prozess, aber die Ergebnisse sind nicht korrekt.Falsche berechnete CPU-Auslastung mit C# und WMI
CPU-Auslastung addiert sich nicht zu 100%, sondern eher zu 120% oder 130% und ich weiß nicht, was ich falsch mache. Es scheint, als ob es die richtige CPU-Auslastung für verschiedene Apps wie Firefox, VS2010, Office, .. berechnet aber Probleme mit System Idle Process hat.
public List<ProcInfo> GetRunningProcesses()
{
List<ProcInfo> allProcesses = new List<ProcInfo>();
UInt64 currentProcessCpuTime = 0;
UInt64 allProcessCpuTime = 0;
SelectQuery wmiQuery = new SelectQuery("SELECT Name, Description, ProcessId, KernelModeTime, UserModeTime FROM Win32_Process");
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(connectionScope, wmiQuery);
ManagementObjectCollection moc = oSearcher.Get();
foreach (ManagementObject mo in moc)
{
allProcessCpuTime += (UInt64)mo["KernelModeTime"] + (UInt64)mo["UserModeTime"];
}
foreach (ManagementObject mo in moc)
{
currentProcessCpuTime = (UInt64)mo["KernelModeTime"] + (UInt64)mo["UserModeTime"];
allProcesses.Add(new ProcInfo((string)mo["Name"], (string)mo["Description"], (UInt32)mo["ProcessId"], (currentProcessCpuTime/(double)allProcessCpuTime * 100));
}
return allProcesses;
}
EDIT:
Ich fand, dass meine Funktion ist alles falsch.
Ich beginne ein Kopfgeld für die beste Arbeitslösung. Lösung muss für lokales und entferntes System funktionieren und sollte schnell sein.
Wenn Sie nicht gezwungen sind, WMI zu verwenden, gibt es eine andere Art und Weise perf Zähler mit: http://stackoverflow.com/questions/278071/how-to-get-the-cpu-usage-in-c –
Ist es möglich, dass sich die Werte zwischen Iterationen Ihrer Loops ändern? Das heißt, ein Element hat Prozessorzeit an einem Punkt der Schleife und dann bekommt ein anderer Zeit während der nächsten Iteration? Nur ein Gedanke ... –
Ich stimme Mark zu - Sie sollten einen Schnappschuss der Leistungsindikatoren machen (vorzugsweise parallel, wenn Sie können, um Ihre Chance zu maximieren, sie alle zur gleichen Zeit zu bekommen) Dann machen Sie Mathe auf sie. Sie sind in einem Zustand der Flucht. –