2009-09-21 14 views
5

Ich muss hier etwas sehr falsch machen. Ich erstelle einen benutzerdefinierten Leistungsindikator wie folgt:Warum ändern sich meine Leistungsindikatoren nicht?

Die Zählerkategorie und der Leistungsindikator werden im Leistungsmonitor erstellt und angezeigt.

Ich versuche, dann den Wert der jedoch

PerformanceCounter myCounter = 
    new PerformanceCounter(counterCategory, counterName, false); 

for (int i = 0; i < 10; i++) 
{ 
    Console.WriteLine("Setting to "+i); 
    myCounter.RawValue = i; 
    Thread.Sleep(200); 
} 

myCounter.Close(); 

Zähler zu ändern, wie ich den Zähler im Performance-Monitor nichts zugucken geschieht, ändert sich der Wert nie.

Also, was mache ich falsch?

Wenn ich einen Aufruf von nextValue() oder rawValue() hinzufüge, wird der Wert von diesem wie erwartet zurückgegeben, aber der Windows-Systemmonitor zeigt weiterhin eine flache Linie an, z.

for (int i = 0; i < 10; i++) 
{ 
    Console.WriteLine("Setting to "+i); 
    myCounter.IncrementValue() 
    Console.WriteLine("Next Value = "+myCounter.RawValue()); 
    Thread.Sleep(200); 
} 

Edit: ich gefunden habe, dass wenn ich den Performance-Monitor schließen und erneut öffnen, ohne die Zähler zu löschen, dass plötzlich erkennt, es gibt einen neuen Wert. Daher werden die Werte festgelegt und bleiben bestehen, der Systemmonitor sieht die Änderungen jedoch nicht.

Antwort

2

Ein Follow-up ist in Ordnung. Es scheint unter Win7 sowieso, dass der Leistungsmonitor möglicherweise nicht wie erwartet funktioniert. Als ich den Testcode geschrieben habe, habe ich die Anwendung nach dem Erstellen der Zähler angehalten, um den Leistungsmonitor zu starten. Sobald ich es fortgesetzt habe, hat der Monitor seine Zähler nie geändert, obwohl der zugrunde liegende Zähler geändert wurde.

Wenn ich dann den Performance Monitor verlasse und neu starte, wird der letzte Zählerwert im Testprogramm angezeigt, der anzeigt, dass er korrekt gesetzt wurde. Wenn ich dann das Testprogramm erneut ausführen würde, nur Werte ändern, würde der Performance Monitor schließlich die Änderungen übernehmen.

Also der Code, wie alle angegeben, ist richtig, es war der Windows-Performance-Monitor, der sich schlecht benahm.

Vielen Dank für Ihre Antworten!

+0

Oder in meinem Fall ein Neustart. –

0

Ihr Code sieht gut aus. Aus meinem Arbeitsbeispiel besteht der einzige Unterschied darin, dass ich die increment-Methode nach dem Setzen von RawValue aufruft.

PerformanceCounter myCounter = 
    new PerformanceCounter(counterCategory, counterName, false); 

for (int i = 0; i < 10; i++) 
{ 
    Console.WriteLine("Setting to "+i); 
    myCounter.Increment(); 
    Thread.Sleep(200); 
} 

myCounter.Close(); 
+0

Nein, immer noch eine flache Linie, ich fürchte, mit Increment() und mit der Einstellung der RawValue. – blowdart

+0

Lustig. Betrachtet es während der Mittagspause. – Dejan

1

Ist es möglich, dass Sie während des Tests den Namen des Zählers geändert haben? Ihr Code überprüft nicht, ob die Kategorie Ihren Zähler enthält. Er überprüft nur, ob die Kategorie vorhanden ist, und wenn dies der Fall ist, wird die Kategorie nicht erstellt.

Wenn Sie die Namen der Leistungsindikatoren seit der ersten Erstellung der Kategorie geändert haben, würde Ihr neuer Leistungsindikator in der Kategorie nicht mehr vorhanden sein und Sie könnten einen kleinen Unterschied im Namen des Leistungsindikators übersehen.

+0

Es ist eine nette Idee, aber ich lösche die Kategorie, bevor ich dies ausführe, so wird es neu erstellt, und dann werden sowohl der Kategoriename als auch der Zählername in Strings gehalten, die sowohl zum Erstellen als auch zum Öffnen des Zählers verwendet werden. – blowdart

+1

Ist das Teil eines größeren Projekts? Wenn ich Ihren Code aus der Frage nahm und ihn in die Methode 'static void Main (string [] args)' eines Konsolenprojekts einpackte, funktionierte das ohne Änderung.Ich musste es zweimal ausführen, um die Kategorie zu erstellen, damit ich sie im Systemmonitor finden konnte, und dann ein zweites Mal, um zu sehen, wie sich die Werte änderten. – GBegen

+0

Dies war in einer Konsolen-App (und zum Spaß eine Webseite, um Rohwerte zu setzen). Am Ende habe ich den Performance-Monitor geschlossen und wieder geöffnet, und dann sah er plötzlich die Änderungen. Es kann sein, dass es die Überwachung nicht direkt nach dem Erstellen eines Leistungsindikators wünscht. – blowdart

Verwandte Themen