2016-09-16 5 views
0

Ich möchte die aktuelle CPU-Nutzung mit den Codes unten (C# in asp.net Framework) herausfinden. Allerdings gibt es mir "0% der CPU-Auslastung", wenn ich versuche, das Programm auszuführen. Als ich meinen Aufgabenmanager überprüfte, fand ich heraus, dass die tatsächliche CPU-Auslastung insgesamt mehr als 5% beträgt. Weiß jemand, was mit dem unten stehenden Code falsch ist?erhalten aktuelle CPU-Nutzung mit C# in asp.net Framework

public partial class cpuUsage : System.Web.UI.Page 
{ 
    PerformanceCounter cpu; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     cpu = new PerformanceCounter(); 
     cpu.CategoryName = "Processor"; 

     cpu.CounterName = "% Processor Time"; 
     cpu.InstanceName = "_Total"; 
     lblCPUUsage.Text = getCurrentCpuUsage(); 
    } 

    public string getCurrentCpuUsage() 
    { 
     return cpu.NextValue() + "%"; 
    } 
} 
+0

Da viel Code fehlt, muss ich hier raten: Initialisierst du den PerformanceCounter jedes Mal neu, wenn du versuchst, einen Wert zu bekommen? Es könnte 0 sein, weil Sie es nur einmal benutzen. –

+0

@ManfreedRadlwimmer, sorry, ich habe die Codes bearbeitet, um es klarer zu machen – Antoni

Antwort

1

Der erste von einem PerformanceCounter zurückgegebene Wert wird immer 0 sein. Sie benötigen einen Timer oder Thread, der den Wert im Hintergrund überwacht. Dieser Code zum Beispiel gibt den richtigen Wert jedes zweite (nicht über diese tatsächlichen Code verwenden, es ist schnell und schmutzig):

new Thread(() => 
{ 
    var cpu = new PerformanceCounter 
    { 
     CategoryName = "Processor", 
     CounterName = "% Processor Time", 
     InstanceName = "_Total" 
    } 

    while (true) 
    { 
     Debug.WriteLine("{0:0.0}%", cpu.NextValue()); 
     Thread.Sleep(1000); 
    } 
}).Start(); 

Stellen Sie sicher, die Bemerkungen des PerformanceCounter.NextValue Methode zu lesen:

Wenn der berechnete Wert eines Zählers von zwei Zählerständen abhängt, gibt der erste Lesevorgang 0,0 zurück. Das Zurücksetzen der Leistungsindikatoreigenschaften, um einen anderen Leistungsindikator anzugeben, entspricht dem Erstellen eines neuen Leistungsindikators, und die erste Leseoperation, die die neuen Eigenschaften verwendet, gibt 0.0 zurück. Die empfohlene Verzögerungszeit zwischen Aufrufen der NextValue-Methode beträgt eine Sekunde, damit der Zähler den nächsten inkrementellen Lesevorgang ausführen kann.

Verwandte Themen