Das ist, weil Sie NextValue
mehrmals auf der gleichen PerformanceCounter
Instanz aufrufen müssen (also mindestens zweimal). Der erste Anruf wird immer wieder zurückkehren 0.
Sie können NextValue
Handler zweimal in Ihrem Page_Load
Ereignis aufrufen (Art) dieses Problem umgehen, nur den Rückgabewert des zweiten Anruf zu speichern:
float cpuUsage = 0.00F;
this.theCPUCounter.NextValue();
cpuUsage = this.theCPUCounter.NextValue();
Der Grund Das zeigt in der QuickWatch des Debuggers wohl nur, weil es (implizit) mehrfach aufgerufen wird (einmal vom Programm und einmal vom Debugger für den QuickWatch-Wert).
Update auf die „Art“ oben:
Wie andere erwähnt haben Sie in der Regel einige Zeit zwischen den beiden Anrufen muss schlafen, um tatsächlich einen Unterschied in der CPU-Last zu beobachten, die in einer „messbaren“ Differenz resultiert. Sleeping für 1 s ist in der Regel der Trick, aber möglicherweise keine akzeptable Verzögerung beim Laden Ihrer Seite.
Was Sie wirklich tun möchten, ist ein Hintergrund-Thread, der wiederholt diesen Leistungsindikator abfragt und ein paar Sekunden dazwischen schläft. Und das Ergebnis irgendwo speichern. Fragen Sie von Ihrer Page_Load
oder anderen Ereignissen/Funktionen den (letzten) Wert ab. Natürlich mit allen notwendigen Sperren gegen Datenrennen. Es wird so genau sein, wie Sie in Bezug auf diesen Zeiger bekommen können.
Da Sie offensichtlich ASP.NET verwenden, müssen Sie vorsichtig mit solchen Hintergrund Threads sein. Ich bin kein ASP.NET-Experte, aber laut this sollte es möglich sein, obwohl der Thread (und die Perf-Zähler-Lesungen, die es getan hat) wiederverwendet wird, wenn Ihre App-Domain/Web-Anwendung ist. Für diese Art von Funktionalität sollte das jedoch kein Problem sein.
Dumme Bemerkung, aber vielleicht hast du die Anweisung beim Debuggen noch nicht übersprungen, also ist der neue Wert noch nicht in der Variablen 'cpuUsage' gespeichert? – Mr47