Verwirrung über AverageTimer32 PerformanceCounter

9

Ich versuche ein PerformanceCounter einzurichten, um die durchschnittliche Ausführungszeit einer bestimmten Methode zu messen. Ich habe versucht, auf AverageTimer32 nachzulesen und ich habe mir viele Beispiele angesehen, aber ich kann es einfach nicht richtig machen.

Ich habe die Kategorien

eingerichtet %Vor%

Dann erstelle ich die Zähler

%Vor%

Und schließlich protokolliere ich die verstrichene Zeit jedes Mal, wenn meine Methode aufgerufen wird

%Vor%

Wenn ich so vorgehe, habe ich ein Ergebnis im Performance Monitor, das so aussieht. Ich bekomme Spikes statt einer Kurve um 50 ms:

Habe ich AverageTimer32 falsch verstanden? Ich habe darüber gelesen, aber es ist ein bisschen verwirrend. Ich habe jedoch Beispiele gesehen, die praktisch dasselbe machen wie ich, also schätze ich, dass es funktionieren sollte. Was könnte der Grund sein, dass ich nur Spikes bekomme?

Bearbeiten Es mag erwähnenswert sein, dass TheMethodIWantToMeasure nur alle ~ 5s aufgerufen wird, und ich habe gerade gemerkt, dass ich die Spitze alle ~ 5 Sekunden bekomme. Aber ich verstehe nicht, wie das die Ergebnisse beeinflussen kann, wenn AverageTimer32 die Formel ((N 1 -N 0) / F) / (B 1 -B 0) verwendet. Es sollte nicht davon abhängen, wie oft ich Werte für N und B speichere?

    
Joel 25.03.2013, 14:46
quelle

1 Antwort

1

Ihre Antwort liegt in der Aktualisierungs- / Abtastrate Ihrer Permon-Einstellungen. Wenn Sie Ihr ~ 5s Intervall entfernen oder es zu etwas wie ~ 10ms ändern, werden Sie wahrscheinlich feststellen, dass das Diagramm ein wenig mehr aussieht, als Sie ursprünglich erwartet hatten. Alternativ können Sie auch die Aktualisierungsrate Ihres Leistungszählers auf ein höheres Intervall (30 Sekunden) einstellen. ( Mach das, indem du mit der rechten Maustaste auf das perfMon-Diagramm klickst - & gt; Eigenschaften - & gt; Registerkarte Allgemein - & gt; Probe alle x Sekunden ).

Der Grund ist, dass perfMon alle 1 Sekunde (standardmäßig) aktualisiert wird und dann Ihren Durchschnittswert anzeigen muss. Es dauert also " all " die Operationen, die Sie Ihren Zählern für diese Sekunde hinzugefügt haben, und plottet sie im Diagramm.

Beispiel: Wenn Sie 3 -Operationen in einer Sekunde ausführen ( 0.1ms, 0.2ms und 0.3, ms ), wird PerfMon Zeige deinen Durchschnitt auf 0.2ms an, was korrekt ist.

Warum die Lücken? Ich glaube, das liegt daran, dass jetzt, nachdem Ihr Durchschnitt berechnet wurde und Sie Ihren "Spike" sehen, die nächste Sekunde (wenn perfMon erneut aktualisiert wird), der Durchschnitt von 0 Operationen in 0 Sekunden = 0 berechnet wird.

Mein Vorschlag (wenn Sie den Durchschnitt der Dauer Ihrer TheMethodIWantToMeasure im Durchschnitt sehen möchten, ist nehmen Sie Ihr ~ 5s Intervall vollständig heraus und lassen Sie die Methode einfach laufen Das sollte den Trick machen.

    
Niels Filter 02.02.2015 13:33
quelle

Tags und Links