Sdílet prostřednictvím


Čítače výkonu a vnitroprocesorové souběžné aplikace

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

Pomocí Sledování výkonu (Perfmon.exe) je možné odlišit čítače výkonu na základě modulu runtime. Toto téma popisuje změnu registru potřebnou k povolení této funkce.

Výchozí chování

Ve výchozím nastavení Sledování výkonu zobrazuje čítače výkonu pro jednotlivé aplikace. Existují však dva scénáře, ve kterých je to problematické:

  • Když monitorujete dvě aplikace se stejným názvem. Pokud jsou například obě aplikace pojmenované myapp.exe, zobrazí se jedna jako moje aplikace a druhá jako myapp#1 ve sloupci Instance . V tomto případě je obtížné shodovat s čítačem výkonu konkrétní aplikace. Není jasné, jestli data shromážděná pro myapp#1 odkazují na první myapp.exe nebo druhý myapp.exe.

  • Pokud aplikace používá více instancí modulu CLR (Common Language Runtime). Rozhraní .NET Framework 4 podporuje scénáře souběžného hostování v procesu; to znamená, že jeden proces nebo aplikace může načíst více instancí modulu CLR (Common Language Runtime). Pokud jedna aplikace s názvem myapp.exe ve výchozím nastavení načte dvě instance modulu runtime, budou ve sloupci Instance označeny jako myapp a myapp#1. V tomto případě není jasné, jestli moje aplikace a myapp#1 odkazují na dvě aplikace se stejným názvem nebo na stejnou aplikaci se dvěma moduly runtime. Pokud více aplikací se stejným názvem načítá více modulů runtime, je nejednoznačnost ještě větší.

Klíč registru můžete nastavit tak, aby se tato nejednoznačnost eliminovala. U aplikací vyvinutých pomocí rozhraní .NET Framework 4 přidá tato změna registru identifikátor procesu následovaný identifikátorem instance modulu runtime do názvu aplikace ve sloupci Instance . Místo aplikace nebo aplikace č. 1 je teď aplikace označena jako application_pprocessID_rruntimeID ve sloupci Instance. Pokud byla aplikace vyvinuta pomocí předchozí verze modulu CLR (Common Language Runtime), je tato instance reprezentována jako application_pprocessID za předpokladu, že je nainstalovaná rozhraní .NET Framework 4.

Čítače výkonu pro souběžné aplikace

Pokud chcete zpracovat čítače výkonu pro více běžných verzí modulu runtime jazyka hostovaných v jedné aplikaci, musíte změnit nastavení jednoho klíče registru, jak je znázorněno v následující tabulce.

Hodnota
Klíč Hkey_local_machine\system\currentcontrolset\services\. NETFramework\Performance
Položka ProcessNameFormat
Typ REG_DWORD
Hodnota 2 (0x00000002)

Hodnota 0 ProcessNameFormat značí, že je povolené výchozí chování. To znamená, že Perfmon.exe zobrazí čítače výkonu na základě jednotlivých aplikací. Když nastavíte tuto hodnotu na hodnotu 2, Perfmon.exe nejednoznačný počet verzí aplikace a poskytuje čítače výkonu na základě modulu runtime. Jakákoli jiná hodnota nastavení ProcessNameFormat klíče registru není podporována a vyhrazena pro budoucí použití.

Po aktualizaci ProcessNameFormat nastavení klíče registru je nutné restartovat Perfmon.exe nebo jiné uživatele čítačů výkonu, aby nová funkce pojmenování instance fungovala správně.

Následující příklad ukazuje, jak změnit ProcessNameFormat hodnotu programově.

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

Když provedete tuto změnu registru a pokud je nainstalována rozhraní .NET Framework 4 nebo novější, Perfmon.exe zobrazí názvy aplikací jako application_processID, kdeaplikace je název aplikace a processID je identifikátor procesu aplikace.p Pokud například aplikace s názvem myapp.exe načte dvě instance modulu CLR (Common Language Runtime), Perfmon.exe může jednu instanci identifikovat jako myapp_1416 a druhou jako myapp_3160.

Poznámka:

Identifikátor procesu eliminuje nejednoznačnost překladu dvou aplikací se stejným názvem, který používá starší verze modulu runtime. Identifikátor modulu runtime není vyžadován pro předchozí verze, protože předchozí verze modulu CLR (Common Language Runtime) nepodporují souběžné scénáře.

Pokud rozhraní .NET Framework 4 nebo novější verze není k dispozici nebo bylo odinstalováno, nastavení klíče registru nemá žádný vliv. To znamená, že dvě aplikace se stejným názvem se budou dál zobrazovat v Perfmon.exe jako aplikace a aplikace #1 (například jako moje aplikace a moje aplikace#1).