Ich möchte die Gesamt-CPU-Auslastung für eine Anwendung in C # ermitteln. Ich habe viele Möglichkeiten gefunden, um die Eigenschaften von Prozessen zu untersuchen, aber ich möchte nur die CPU-Auslastung der Prozesse und die Gesamt-CPU, wie Sie sie im TaskManager erhalten.
Wie mache ich das?
Antworten:
Sie können die PerformanceCounter- Klasse von System.Diagnostics verwenden .
Initialisieren Sie wie folgt:
Konsumiere so:
quelle
Etwas mehr als erforderlich, aber ich verwende den zusätzlichen Timer-Code, um zu verfolgen und zu warnen, ob die CPU-Auslastung über einen längeren Zeitraum von 1 Minute oder länger 90% oder mehr beträgt.
quelle
cpuCounter.NextValue
gibt a zurückfloat
. Warum also einem zuweisendynamic
? Warum sollte man das danndynamic
als zurückgebenobject
? Warum sollte man dann versuchen,object
einint
in der Zeile zuzuweisenint cpuPercent = getCPUCounter()
? (Dieser Code wird nicht kompiliert.)Nachdem ich einige Zeit damit verbracht hatte, ein paar verschiedene Themen zu lesen, die ziemlich kompliziert erschienen, kam ich auf diese Idee. Ich brauchte es für einen 8-Kern-Computer, auf dem ich den SQL Server überwachen wollte. Für den folgenden Code habe ich dann "sqlservr" als appName übergeben.
Es scheint den Prozentsatz der von SQL auf meinem 8-Core-Server verwendeten CPU korrekt zu messen.
quelle
done
auf wahr? Sofern ich nichts übersehen habe, scheint dies eine Endlosschleife zu sein:while(!done){...}
Es ist in Ordnung, ich habe es verstanden! Danke für Ihre Hilfe!
Hier ist der Code dafür:
quelle
Sie können WMI verwenden, um Informationen zum CPU-Prozentsatz abzurufen. Sie können sich sogar bei einem Remotecomputer anmelden, wenn Sie über die richtigen Berechtigungen verfügen. Unter http://www.csharphelp.com/archives2/archive334.html erhalten Sie eine Vorstellung davon, was Sie erreichen können.
Hilfreich könnte auch die MSDN-Referenz für den Win32_Process- Namespace sein.
Siehe auch ein CodeProject-Beispiel. Gewusst wie: (Fast) alles in WMI über C # .
quelle
CMS hat es richtig gemacht, aber auch wenn Sie den Server-Explorer in Visual Studio verwenden und mit der Registerkarte Leistungsindikator herumspielen, können Sie herausfinden, wie Sie viele nützliche Metriken erhalten.
quelle
Dies scheint für mich zu funktionieren, ein Beispiel für das Warten, bis der Prozessor einen bestimmten Prozentsatz erreicht
quelle
Diese Klasse fragt den Zähler automatisch alle 1 Sekunden ab und ist außerdem threadsicher:
quelle
System.DateTime
ist eigentlich ein 8-Byte-Werttyp, was bedeutet, dass Zuweisungen zu einerDateTime
Variablen nicht atomar sind. Dieser Code ist auf 32-Bit-Plattformen nicht threadsicher.Ich mochte es nicht, alle
PerformanceCounter
Lösungen im 1-Sekunden-Stall ergänzen zu müssen . Stattdessen habe ich mich für eineWMI
Lösung entschieden. Der Grund für das 1-Sekunden-Warten / Stillstand besteht darin, dass der Messwert bei Verwendung von a genau istPerformanceCounter
. Wenn Sie diese Methode jedoch häufig aufrufen und diese Informationen aktualisieren, würde ich raten, diese Verzögerung nicht ständig zu verursachen ... selbst wenn Sie daran denken, einen asynchronen Prozess durchzuführen, um sie abzurufen.Ich habe mit dem Snippet von hier aus begonnen. Die CPU-Auslastung in WMI mithilfe von C # zurückgeben und eine vollständige Erklärung der Lösung in meinem Blog-Beitrag unten hinzugefügt:
Abrufen der CPU-Auslastung für alle Kerne in C # mithilfe von WMI
quelle
Originalinformationen in diesem Link https://gavindraper.com/2011/03/01/retrieving-accurate-cpu-usage-in-c/
quelle