Erhalten Sie die Durchschnittliche CPU-Auslastung des Computers in den letzten x Minuten
Diese Frage "Wie man die CPU-Auslastung in C#?" zeigt einige der Möglichkeiten, um die aktuelle CPU-Auslastung (%) von einem computer .NET.
Da die CPU-Auslastung schwankt Recht Häufig, ich denke, die aktuelle CPU-Auslastung ist oft kein guter Indikator für damit beschäftigt, wie ein computer (z.B. für die Terminierung oder load-balancing-Zwecke). Gibt es eine effiziente Möglichkeit, um die Durchschnittliche CPU-Auslastung in den letzten x Minuten, z.B. Letzte 5 Minuten?
Ich denke an so etwas wie eine Methode GetAverageCpuUsage(int Periode), die aufgerufen werden können durch ein load-balancing und scheduling-Modul.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tatsächlich, das ist genau das, was PerformanceCounter von der 2. die meisten von Ihnen positiv bewertet werden Antwort in der anderen Frage hat sich erledigt, Sie sind nur die Messung über 1 Sekunde.
Den % es gibt Sie ist der Durchschnitt der cpu-seance der letzten
NextValue()
gemacht wurde, auf den Tresen. Also, wenn Sie möchten, dass die Durchschnittliche cpu in den letzten 5 min haben, rufen Sie einfachNextValue()
nur einmal alle 5 min.Hier ist ein guter Artikel welche erklären, wie der Leistungsindikatoren.
(end value - start value)/(end time - start time)
vor, es wäre deine Programme Verantwortung zum speichern dieser Wert so einige andere user könnten query es und könnte es nachschlagen in der Datenbank und berechnen Sie den Wert..Den oben genannten Antworten geben ein gutes Beispiel für eine Möglichkeit zum berechnen der CPU-Auslastung.Aber ich möchte darauf hinweisen, dass etwas falsch ist und in die Irre geführt wurde. Die SubtractTimes Funktion muss etwas anders sein.
BEMERKEN UINT32 für die lowDateTime. Dies ist, weil, wenigstens in C#, die comtype.FILETIME-Struktur wirft den DWORD-Wert in ein int32-Wert, so dass, wenn der Wert mehr als MAX signed Int Sie finden einen negativen Wert, das sollte nie der Fall sein. Wenn Sie werfen diese direkt zu "UINT64" - Typ, der intern für die Erhaltung dieses Zeichen umgewandelt, Int64 ersten und dann in UInt64 Sie sehen also einen falschen Wert. Stattdessen wollen Sie warf die lowDateTime zu einem Uint32-Typ, um loszuwerden, die negativen Zeichen, und dann gegossen, um UInt64 (dies würde automatisch passieren, da es Teil von | Betrieb). Dasselbe sollte für die dwHighDateTime conponent, aber das ist in Ordnung, da sollten es nicht mehr als MaxInt in der Regel (gut, das hängt wieder von deinen Anwendungsfall).
probieren Sie etwas wie:
nachdem Sie es so gut in der ur-code:
geholfen haben, auf etwas