Wie verwende ich PerformanceCounterType AverageTimer32?

8

Ich versuche die Zeit zu messen, die benötigt wird, um einen Code auf meinem Produktionsserver auszuführen. Ich möchte diese Informationen in Echtzeit überwachen, also habe ich beschlossen, Performance Analyzer zu einem Whizz zu machen. Ich verstehe von MSDN , dass ich sowohl eine AverageTimer32- als auch eine AverageBase-Leistung erstellen muss Counter, die ich ordnungsgemäß habe. Ich inkrementiere den Zähler in meinem Programm, und ich kann den CallCount auf und ab gehen, aber die AverageTime ist immer Null. Was mache ich falsch?

Hier ist ein Ausschnitt des Codes:

%Vor%     
Patrick J Collins 03.08.2009, 08:46
quelle

3 Antworten

4

Zunächst ist das Anhängen an Leistungsindikatoren ziemlich teuer. Sie sollten also versuchen, globale Instanzen für sie verfügbar zu halten, statt sie jedes Mal zu öffnen und zu schließen.

Sie scheinen die richtige Idee zu haben, das ist genau das, was wir in unserem Code zur Leistungsüberwachung tun. Wie auch immer, wir machen .NextValue nicht unmittelbar vor der Aktualisierung dieser - also würde ich versuchen, das anfänglich zu beenden.

Sind Sie auch sicher, dass Environment.TickCount - init_call_time nicht so klein ist, dass es 0 ergibt? Environment.TickCount hat keine große Auflösung, die System.Diagnostics.Stopwatch Klasse hat viel bessere Genauigkeit.

    
Kieran Benton 03.08.2009 10:23
quelle
2

Angenommen, Sie sind kein Multi-Threading, dann sollte dies

sein %Vor%

Wenn Sie in einer Multithread-Situation sind, dann:

%Vor%     
ShuggyCoUk 03.08.2009 11:50
quelle
0

AverageTimer32 erhöht die Zeit, die zwischen zwei Aufrufen verstrichen ist, und die AverageBase-Inkremente um 1 für jede durchgeführte Operation.

Hier ist eine Dokumentation des PerformanceCounterType. Ссылка

und hier ist eine andere Ressource: Ссылка

    
Lance 06.05.2010 03:09
quelle

Tags und Links