Udostępnij za pośrednictwem


Liczniki wydajności i In-Process Side-By-Side aplikacje

Uwaga / Notatka

Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.

Za pomocą monitora wydajności (Perfmon.exe) można rozróżniać liczniki wydajności dla poszczególnych środowisk uruchomieniowych. W tym temacie opisano zmianę rejestru wymaganą do włączenia tej funkcji.

Domyślne zachowanie

Domyślnie monitor wydajności wyświetla liczniki wydajności dla poszczególnych aplikacji. Istnieją jednak dwa scenariusze, w których jest to problematyczne:

  • Podczas monitorowania dwóch aplikacji o tej samej nazwie. Jeśli na przykład obie aplikacje mają nazwę myapp.exe, jedna zostanie wyświetlona jako myapp , a druga jako myapp#1 w kolumnie Wystąpienie . W takim przypadku trudno jest dopasować licznik wydajności do określonej aplikacji. Nie jest jasne, czy dane zebrane dla aplikacji myapp#1 odnoszą się do pierwszego myapp.exe, czy drugiego myapp.exe.

  • Kiedy aplikacja korzysta z wielu instancji wspólnego środowiska uruchomieniowego. Platforma .NET Framework 4 obsługuje scenariusze hostingu równoległego w procesie; oznacza to, że jeden proces lub aplikacja może załadować wiele instancji środowiska uruchomieniowego języka wspólnego. Jeśli pojedyncza aplikacja o nazwie myapp.exe ładuje domyślnie dwa wystąpienia środowiska uruchomieniowego, zostaną one wyznaczone w kolumnie Wystąpienie jako myapp i myapp#1. W tym przypadku nie jest jasne, czy aplikacja myapp i myapp#1 odwołują się do dwóch aplikacji o tej samej nazwie, czy do tej samej aplikacji z dwoma środowiskami uruchomieniowymi. Jeśli wiele aplikacji o tej samej nazwie ładuje wiele środowisk uruchomieniowych, niejednoznaczność jest jeszcze większa.

Możesz ustawić klucz rejestru, aby wyeliminować tę niejednoznaczność. W przypadku aplikacji opracowanych przy użyciu programu .NET Framework 4 ta zmiana rejestru dodaje identyfikator procesu, a następnie identyfikator wystąpienia środowiska uruchomieniowego do nazwy aplikacji w kolumnie Wystąpienie . Zamiast aplikacji lub aplikacji nr 1 aplikacja jest teraz identyfikowana jako application_pprocessID_rruntimeID w kolumnie Wystąpienie . Jeśli aplikacja została opracowana przy użyciu poprzedniej wersji środowiska uruchomieniowego języka wspólnego, to wystąpienie jest reprezentowane jako application_pprocessID pod warunkiem, że jest zainstalowany program .NET Framework 4.

Liczniki wydajności dla aplikacji In-Process zainstalowanych równolegle

Aby obsługiwać liczniki wydajności dla wielu wersji środowiska uruchomieniowego języka wspólnego hostowanych w jednej aplikacji, należy zmienić jedno ustawienie klucza rejestru, jak pokazano w poniższej tabeli.

Wartość
Klucz HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance
Wpis FormatNazwyProcesu
Typ REG_DWORD
Wartość 2 (0x00000002)

Wartość 0 dla ProcessNameFormat wskazuje, że domyślne zachowanie jest włączone. Oznacza to, że Perfmon.exe wyświetla liczniki wydajności dla poszczególnych aplikacji. Gdy ustawisz tę wartość na 2, Perfmon.exe rozróżnia wiele wersji aplikacji i zapewnia liczniki wydajności dla poszczególnych środowisk uruchomieniowych. Każda inna wartość ProcessNameFormat ustawienia klucza rejestru jest nieobsługiwana i zarezerwowana do użycia w przyszłości.

Po zaktualizowaniu ProcessNameFormat ustawienia klucza rejestru należy ponownie uruchomić Perfmon.exe lub innych użytkowników liczników wydajności, aby nowa funkcja nazewnictwa wystąpień działała poprawnie.

W poniższym przykładzie pokazano, jak zmienić wartość ProcessNameFormat programowo.

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

Jeśli wprowadzisz tę zmianę rejestru, a program .NET Framework 4 lub nowszy jest zainstalowany, Perfmon.exe wyświetla nazwy aplikacji jako application_pprocessID, gdzie aplikacja jest nazwą aplikacji, a processID jest identyfikatorem procesu aplikacji. Jeśli na przykład aplikacja o nazwie myapp.exe ładuje dwa wystąpienia środowiska uruchomieniowego języka wspólnego, Perfmon.exe może zidentyfikować jedno wystąpienie jako myapp_1416, a drugie jako myapp_3160.

Uwaga / Notatka

Identyfikator procesu eliminuje niejednoznaczność rozpoznawania dwóch aplikacji o tej samej nazwie, które używają wcześniejszych wersji środowiska uruchomieniowego. Identyfikator środowiska uruchomieniowego nie jest wymagany dla poprzednich wersji, ponieważ poprzednie wersje środowiska uruchomieniowego języka wspólnego nie obsługują scenariuszy równoległych.

Jeśli program .NET Framework 4 lub nowsza wersja nie jest obecny lub został odinstalowany, ustawienie klucza rejestru nie ma żadnego wpływu. Oznacza to, że dwie aplikacje o tej samej nazwie będą nadal wyświetlane w Perfmon.exe co aplikacja i aplikacja#1 (na przykład myapp i myapp#1).