2016-07-28 13 views
2

Ich versuche zu überwachen, wie viele Vorgänge pro Sekunde auftreten, indem Sie einen Leistungsindikator mit einem CounterType von PerformanceCounterType.RateOfCountsPerSecond32 verwenden. Es scheint ziemlich einfach zu verwenden, aber das Problem ist, dass die Ausgabe sehr laut ist.RateOfCountsPerSecond32 ergibt eine gezackte statt glatte Kurve

enter image description here

Die Diagrammlinie verfolgt nicht die Durchschnitt Rate, erscheint aber die tatsächliche Anzahl pro Sekunde zu verfolgen. Die Linie springt von der minimalen Rate zum Maximum, anstatt der aktuellen Durchschnittskurve zu folgen, die viel glatter ist.

Das Ergebnis ist, dass die Grafik zig zaggy jaggy ist, die eine Menge unnützes visuelles Rauschen erzeugt, das die Verfolgung vieler Zähler auf einmal stört. Die Zacken im obigen Beispiel sind nicht zu schlecht, aber wenn Sie eine Zählung haben, die wieder von 0 bis 1000 auf 0 geht, sieht Ihr gesamter Graph wie ein Kleinkind aus, das darüber gekritzelt wird.

enter image description here
(künstlerische Darstellung)

Im ersten Beispiel verwendete ich einen Zufallszahlengenerator auf Increment der Zähler zwischen einem und vier Mal pro Sekunde

var rand = new Random(); 
var counters = new MuhCounterExample(); 
ThreadPool.QueueUserWorkItem(x => 
{ 
    while (true) 
    { 
     Thread.Sleep(rand.Next(250, 750)); 
     counters.Increment(); 
    } 
}); 
Console.WriteLine("Running"); 
Console.ReadLine(); 

Dabei code, MuhCounterExample ist eine Klasse, die den Zähler für das Beispiel erstellt und zerstört, und Increment() ruft einfach PerformanceCounter.Increment().

Was ich will, ist eine Art und Weise, dass die Zinsstrukturkurve zu glätten den Durchschnitt Wert mit, anstatt der aktuelle Wert. Ich habe andere Zählertypen angeschaut und ausprobiert, aber anscheinend funktioniert keiner von ihnen für mich. Ich denke, der einzige Weg wäre, die Rate pro Sekunde manuell zu generieren, indem die Ausführungszeit in Koordination mit einem einfachen Zähler wie NumberOfItems32 verfolgt wird, um es zu fälschen, bis ich es mache.

Ist das meine einzige Option? Vermisse ich einen anderen Zähler oder eine Zählereinstellung, die mir das gibt, wonach ich suche? Eine schöne, glatte, Rate pro Sekunde Kurve mit weniger Koffein aber immer noch mit dem kühnen Geschmack von Folgers ©?

+2

Das Problem mit einem Durchschnitt ist, Durchschnitt über was? Die letzten zwei Eingaben? letzte zehn? letzte hundert? Wenn Sie es in perfview betrachten, erhalten Sie den Durchschnitt aller auf dem Bildschirm sichtbaren Punkte. –

+0

@ScottChamberlain hmmm, das ist ein guter Punkt. Running durchschnittliche Rate über X ist, was ich suche, ja. – Will

+0

Für zukünftige Besucher ging ich schließlich mit einem gleitenden Durchschnitt basierend auf dem verknüpften dupierten Ziel. Wie lange eine Historie vom Durchschnitt abhängt, hängt von der Art des Zählers ab. Wenn ich mich über kurze Zeit für radikale Änderungen interessiere, gehe ich für eine Geschichte von weniger als 100 vor. Wenn ich mich nur für den Durchschnitt und nicht für Trends interessiere, glättet eine längere Geschichte von 1000 jegliche Unruhe. Das Schlimme ist, dass Sie dies nicht über die Leistungsindikatorschnittstelle konfigurieren können. Sie müssen also entweder weitere Leistungsindikatoren hinzufügen oder über die Anwendung konfigurierbar machen. – Will

Antwort

1

Verfolgen Sie den Durchschnittswert. Zeichnen Sie es in regelmäßigen Abständen, wenn möglich, um eine konsistent aussehende Grafik zu erzielen.