Liczniki wydajności i wewnątrzprocesowe, równoczesne aplikacje

Korzystając z monitor 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 pierwszej myapp.exe, czy drugiej myapp.exe.

  • Gdy aplikacja używa wielu wystąpień środowiska uruchomieniowego języka wspólnego. Program .NET Framework 4 obsługuje scenariusze hostingu równoległego w procesie; oznacza to, że pojedynczy proces lub aplikacja może załadować wiele wystąpień ś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 równoległych w procesie

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ść
Klawisz HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\. NETFramework\Performance
Wpis ProcessNameFormat
Type 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. Po ustawieniu tej wartości na 2 Perfmon.exe rozbicie wielu 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 odbiorców liczników wydajności, aby nowa funkcja nazewnictwa wystąpień działała poprawnie.

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

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

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 jako aplikacja i aplikacja#1 (na przykład myapp i myapp#1).