Leistungsindikatoren und prozessinterne parallele Anwendungen

Der Systemmonitor (Perfmon.exe) ermöglicht eine laufzeitbasierte Unterscheidung der Leistungsindikatoren. In diesem Thema wird die Registrierungsänderung beschrieben, die erforderlich ist, um diese Funktion zu aktivieren.

Standardverfahren

Die Leistungsindikatoren werden vom Systemmonitor standardmäßig anwendungsbasiert angezeigt. Es gibt jedoch zwei Szenarios, in denen dies problematisch ist:

  • Wenn Sie zwei Anwendungen überwachen, die den gleichen Namen haben. Wenn beide Anwendungen beispielsweise myapp.exe heißen, wird eine Anwendung als myapp und die andere Anwendung als myapp#1 in der Spalte Instanz angezeigt. In diesem Fall ist es schwierig, einen Leistungsindikator einer bestimmten Anwendung zuzuordnen. Es ist nicht klar, ob sich Daten, die für myapp#1 erfasst wurden, auf die erste oder auf die zweite myapp.exe-Anwendung beziehen.

  • Wenn eine Anwendung mehrere Instanzen der Common Language Runtime verwendet. .NET Framework, Version 4 unterstützt prozessinterne parallele Hostingszenarien, sodass in einem Prozess oder einer Anwendung mehrere Instanzen der Common Language Runtime geladen werden können. Wenn eine einzelne Awendung (myapp.exe) zwei Laufzeitinstanzen lädt, werden diese standardmäßig in der Spalte Instanz als myapp und myapp#1 angezeigt. In diesem Fall ist unklar, ob sich myapp und myapp#1 auf zwei Anwendungen mit dem gleichen Namen oder auf die gleiche Anwendung mit zwei Laufzeiten beziehen. Wenn mehrere Anwendungen mit dem gleichen Namen mehrere Laufzeiten laden, entstehen weitere Mehrdeutigkeiten.

Sie können einen Registrierungsschlüssel festlegen, um diese Mehrdeutigkeit auszuschließen. Bei Anwendungen, die mit .NET Framework 4 entwickelt wurden, werden in der Spalte Instanz ein Prozessbezeichner sowie ein Bezeichner für die Laufzeitinstanz an den Namen der Anwendung angefügt. Die Anwendung wird nun in der Spalte Instanz nicht mehr mit application oder application#1 bezeichnet, sondern mit Anwendung_pprocessID_rruntimeID. Wenn eine Anwendung mit einer früheren Version der Common Language Runtime entwickelt wurde, wird diese Instanz als application_pprocessID dargestellt, vorausgesetzt, dass .NET Framework 4 installiert ist.

Leistungsindikatoren für prozessinterne parallele Anwendungen

Um Leistungsindikatoren für mehrere Common Language Runtime-Versionen zu behandeln, die in einer einzelnen Anwendung gehostet werden, müssen Sie eine einzelne Registrierungsschlüsseleinstellung ändern, wie in der folgenden Tabelle veranschaulicht.

Schlüsselname

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance

Wertname

ProcessNameFormat

Werttyp

REG_DWORD

Wert

1 (0x00000001)

Der Wert 0 für ProcessNameFormat gibt an, dass das Standardverhalten aktiviert ist, d. h., "Perfmon.exe" zeigt Leistungsindikatoren pro Anwendung an. Wenn Sie diesen Wert auf 1 festlegen, vereindeutigt "Perfmon.exe" mehrere Versionen einer Anwendung und stellt Leistungsindikatoren pro Runtime bereit. Ein anderer Wert für die ProcessNameFormat-Registrierungsschlüsseleinstellung wird nicht unterstützt und ist für eine zukünftige Verwendung reserviert.

Nachdem Sie die ProcessNameFormat-Registrierungsschlüsseleinstellung aktualisiert haben, müssen Sie "Perfmon.exe" oder andere Consumer von Leistungsindikatoren neu starten, damit die Funktion zum Benennen neuer Instanzen korrekt funktioniert.

Das folgende Beispiel zeigt, wie Sie den ProcessNameFormat-Wert programmgesteuert ändern können.

' Create or open registry key.
Dim key As Microsoft.Win32.RegistryKey 
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey( _
            "System\CurrentControlSet\Services\.NETFramework\Performance")
' Create or overwrite value.
key.SetValue("ProcessNameFormat", 1, _
             Microsoft.Win32.RegistryValueKind.DWord)
key.Close()             
// Create or open registry key.
Microsoft.Win32.RegistryKey key; 
key = Microsoft.Win32.Registry.LocalMachine.CreateSubKey( 
          @"System\CurrentControlSet\Services\.NETFramework\Performance");
// Create or overwrite value.
key.SetValue("ProcessNameFormat", 1, 
             Microsoft.Win32.RegistryValueKind.DWord);
key.Close();

Wenn Sie diese Registrierungsänderung vornehmen, werden die Namen der Anwendungen, die auf .NET Framework 4 abzielen, von Perfmon.exe wie folgt angezeigt: application_pprocessID_rruntimeID. Dabei steht application für den Namen und processID für den Prozessbezeichner der Anwendung, und runtimeID gibt einen Common Language Runtime-Bezeichner an. Wenn z. B. zwei Instanzen der Common Language Runtime von der Anwendung "myapp.exe" geladen werden, kann "Perfmon.exe" eine Instanz als "myapp_p1416_r10" und die andere Instanz als "myapp_p3160_r10" identifizieren. Der Laufzeitbezeichner unterscheidet nur zwischen den Laufzeiten innerhalb eines Prozesses und enthält keine darüber hinaus gehenden Laufzeitinformationen. (Der Laufzeitbezeichner hat beispielsweise keinen Bezug zur Version oder zur SKU der Laufzeit.)

Wenn .NET Framework 4 installiert ist, wirkt sich die Registrierungsänderung auch auf Anwendungen aus, die mit früheren Versionen von .NET Framework entwickelt wurden. Diese werden in Perfmon.exe als application_pprocessID angezeigt. Dabei steht application für den Anwendungsnamen und processID für den Prozessbezeichner. Wenn beispielsweise die Leistungsindikatoren der gleichnamigen Anwendungen myapp.exe und myapp.exe überwacht werden, kann eine Anwendung als myapp_p23900 und die andere Anwendung als myapp_p24908 angezeigt werden.

HinweisHinweis

Der Prozessbezeichner beseitigt die Mehrdeutigkeit bei der Auflösung zweier Anwendungen mit dem gleichen Namen, die eine frühere Versionen der Laufzeit verwenden.Ein Laufzeitbezeichner ist für frühere Versionen nicht erforderlich, da frühere Versionen der Common Language Runtime keine parallelen Szenarios unterstützen.

Wenn .NET Framework 4 nicht vorhanden ist oder deinstalliert wurde, hat das Festlegen des Registrierungsschlüssels keine Auswirkungen. Dies bedeutet, dass zwei Anwendungen mit dem gleichen Namen auch weiterhin als application und als application#1 in Perform.exe angezeigt werden (beispielsweise myapp und myapp#1).