Wenn ich Leistungsindikatoren wie folgt erstelle und verwende:
%Vor%... Ich erhalte eine Ausnahme Instanz 'Name der Instanz' existiert nicht in der angegebenen Kategorie und versteht nicht warum.
P.S. Code
%Vor%... in App.config enthalten.
Ich habe zu früheren Posts hinzugefügt, dass Prozesse wie & lt; ProcessName & gt; _ & lt; ProcessId & gt; - Abhängig von dem Betriebssystem, auf dem Sie Ihre App ausführen (Win XP, Win Vista, Win 7, Win 2003 oder 2008 Server). Um eine zuverlässige Möglichkeit zur Identifizierung Ihres Prozessnamens zum Ermitteln anderer Leistungsindikatoren zu erhalten, könnte eine Funktion wie folgt aussehen:
%Vor% Ich denke, Ihr Problem tritt auf, wenn mehrere Prozesse mit demselben Namen vorhanden sind. Was PerfMon dann tut, ist Anhängen # 1, # 2 usw. an den Prozessnamen. Das bedeutet, dass MyApp.exe zweimal ausgeführt wird, verursacht diese Ausnahme, wenn Sie versuchen, den Leistungsmonitor für "MyApp" zu lesen. Hier ist ein Link zu einer Möglichkeit, dies zu lösen: Leistungsindikatoren nach PID
Das ursprüngliche Format, das ein PID-Suffix (Registry ProcessNameFormat = 1) verwendet, scheint sich seit .NET 4.5 (msdn link ) zu "processame_pid_rid". Daher kann die angenommene Antwort, wie sie derzeit geschrieben wird, für diesen Fall möglicherweise nicht mehr funktionieren.
Diese Lösung sollte immer noch für die neueren Formate funktionieren:
Allerdings können alle diese übereinstimmenden Lösungen anfällig für eine Race-Bedingung sein, bei der sich der Instanzname aufgrund eines Prozesses ändert (# 9 wird # 8), nachdem der Instanzname ermittelt wurde, aber bevor die neue PerformanceCounter () zugewiesen wurde / p>
Es würde viel mehr Sinn machen, dass MS einen PerformanceCounter-Konstruktor bereitstellt, der ein Pid (und möglicherweise jetzt RuntimeId?) direkt akzeptiert, da sich die Instanznamen im laufenden Betrieb ändern können.
Tags und Links c# exception performancecounter