Leistungsindikatoren und prozessinterne parallele Anwendungen

Mithilfe des Systemmonitors (Perfmon.exe) können die Leistungsindikatoren pro Laufzeit unterschieden werden. Dieses Thema beschreibt die erforderlichen Registrierungsänderungen zur Aktivierung dieser Funktion.

Das Standardverhalten

Standardmäßig zeigt der Systemmonitor Leistungsindikatoren für eine einzelne Anwendung an. Es gibt jedoch zwei Szenarios, in denen dies problematisch ist:

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

  • Wenn eine Anwendung mehrere Instanzen der Common Language Runtime verwendet. .NET Framework 4 unterstützt prozessinterne parallele Hostingszenarios, d. h., ein einzelner Prozess oder eine einzelne Anwendung kann mehrere Instanzen der Common Language Runtime laden. Wenn eine einzelne Anwendung namens myapp.exe standardmäßig zwei Laufzeitinstanzen lädt, werden sie in der Instanz-Spalte als MyApp und MyApp#1 festgelegt werden. In diesem Fall ist es nicht klar, ob MyApp und MyApp#1 auf zwei Anwendungen mit dem gleichen Namen oder auf dieselbe Anwendung mit zwei Laufzeiten verweisen. Wenn mehrere Anwendungen mit dem gleichen Namen mehrere Laufzeiten laden, wird die Mehrdeutigkeit noch größer.

Sie können einen Registrierungsschlüssel festlegen, um diese Mehrdeutigkeit zu vermeiden. Für Anwendungen, die mit .NET Framework 4 entwickelt werden, fügt diese Registrierungsänderung einen Prozessbezeichner, gefolgt von einem Instanzbezeichner der Runtime, zum Anwendungsnamen in der Instanz-Spalte hinzu. Anstelle von Anwendung oder Anwendung#1 wird die Anwendung jetzt als Anwendung_pProzessID_rRuntimeID in der Instanz-Spalte angegeben. Wenn eine Anwendung mit einer früheren Version der Common Language Runtime entwickelt wurde, wird diese Instanz als Anwendung_pProzessID dargestellt, falls .NET Framework 4 installiert ist.

Leistungsindikatoren für prozessinterne parallele Anwendungen

Um die Leistungsindikatoren für mehrere Versionen der Common Language Runtime zu behandeln, die in einer einzigen Anwendung gehostet werden, müssen Sie die Einstellungen eines einzelnen Registrierungsschlüssels ändern, wie in der folgenden Tabelle gezeigt.

Wert
Schlüssel HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance
Eingabe ProcessNameFormat
Typ REG_DWORD
Wert 2 (0x00000002)

Der Wert 0 für ProcessNameFormat zeigt an, dass das Standardverhalten aktiviert ist; Perfmon.exe zeigt Leistungsindikatoren nach einzelnen Anwendungen an. Wenn Sie diesen Wert auf 2 festlegen, unterscheidet Perfmon.exe zwischen mehreren Versionen einer Anwendung und stellt Leistungsindikatoren Runtime-spezifisch zur Verfügung. Jeder andere Wert für die ProcessNameFormat-Registrierungsschlüsseleinstellung wird nicht unterstützt und für zukünftige Verwendung reserviert.

Nach der Aktualisierung der ProcessNameFormat-Registrierungsschlüsseleinstellung müssen Sie Perfmon.exe oder andere Consumer von Leistungsindikatoren neu starten, damit die neue namensgebende Funktion der Instanz ordnungsgemäß funktioniert.

Im folgenden Beispiel wird veranschaulicht, wie ein ProcessNameFormat-Wert programmgesteuert verändert werden kann.

// 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();
' 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()

Wenn Sie diese Registrierungsänderung vornehmen und .NET Framework 4 oder höher installiert ist, zeigt Perfmon.exe die Namen von Anwendungen als Anwendung_pProzessID an, wobei Anwendung der Name der Anwendung und ProzessID der Prozessbezeichner der Anwendung ist. Wenn beispielsweise eine Anwendung namens myapp.exe zwei Instanzen der Common Language Runtime lädt, kann Perfmon.exe eine Instanz als myapp_1416 und die zweite als myapp_3160 anzeigen.

Hinweis

Die Prozess-ID beseitigt die Mehrdeutigkeit der Auflösung von zwei Anwendungen mit dem gleichen Namen, die frühere Versionen der Laufzeit verwenden. Ein Laufzeitbezeichner ist nicht für frühere Versionen erforderlich, da frühere Versionen der Common Language Runtime keine parallelen Szenarios unterstützen.

Wenn .NET Framework 4 oder eine höhere Version nicht vorhanden ist oder deinstalliert wurde, hat die Einstellung des Registrierungsschlüssels keine Auswirkungen. Dies bedeutet, dass zwei Anwendungen mit dem gleichen Namen in Perfmon.exe weiterhin als Anwendung und Anwendung#1 angezeigt werden (z.B. MyApp und MyApp#1).