Prestatiemeteritems en in-process side-by-side toepassingen
Notitie
Dit artikel is specifiek voor .NET Framework. Dit geldt niet voor nieuwere implementaties van .NET, waaronder .NET 6 en nieuwere versies.
Met behulp van de prestatiemeter (Perfmon.exe) is het mogelijk om de prestatiemeteritems per runtime te onderscheiden. In dit onderwerp wordt de registerwijziging beschreven die nodig is om deze functionaliteit in te schakelen.
Het standaardgedrag
De prestatiemeter geeft standaard prestatiemeteritems per toepassing weer. Er zijn echter twee scenario's waarin dit problematisch is:
Wanneer u twee toepassingen bewaakt met dezelfde naam. Als beide toepassingen bijvoorbeeld de naam myapp.exe hebben, wordt deze weergegeven als myapp en de andere als myapp#1 in de kolom Exemplaar . In dit geval is het moeilijk om een prestatiemeteritem aan een bepaalde toepassing te koppelen. Het is niet duidelijk of de gegevens die zijn verzameld voor myapp#1 verwijzen naar de eerste myapp.exe of de tweede myapp.exe.
Wanneer een toepassing meerdere exemplaren van de algemene taalruntime gebruikt. .NET Framework 4 biedt ondersteuning voor hostingscenario's naast elkaar; Dat wil gezegd: één proces of toepassing kan meerdere exemplaren van de algemene taalruntime laden. Als één toepassing met de naam myapp.exe twee runtime-exemplaren laadt, worden deze standaard in de kolom Exemplaar aangewezen als myapp en myapp#1. In dit geval is het niet duidelijk of myapp en myapp#1 verwijzen naar twee toepassingen met dezelfde naam of naar dezelfde toepassing met twee runtimes. Als meerdere toepassingen met dezelfde naam meerdere runtimes laden, is de dubbelzinnigheid nog groter.
U kunt een registersleutel instellen om deze dubbelzinnigheid te voorkomen. Voor toepassingen die zijn ontwikkeld met behulp van .NET Framework 4, voegt deze registerwijziging een proces-id toe, gevolgd door een runtime-exemplaar-id aan de naam van de toepassing in de kolom Exemplaar . In plaats van toepassing of toepassing#1 wordt de toepassing nu geïdentificeerd als application_p
processID_r
runtimeID in de kolom Instance. Als een toepassing is ontwikkeld met een eerdere versie van de common language runtime, wordt dat exemplaar weergegeven als application_p
processID mits .NET Framework 4 is geïnstalleerd.
Prestatiemeteritems voor in-procestoepassingen naast elkaar
Als u prestatiemeteritems wilt afhandelen voor runtime-versies van meerdere algemene talen die worden gehost in één toepassing, moet u één registersleutelinstelling wijzigen, zoals wordt weergegeven in de volgende tabel.
Weergegeven als | |
---|---|
Code | Hkey_local_machine\system\currentcontrolset\services\. NETFramework\Performance |
Invoer | ProcessNameFormat |
Type | REG_DWORD |
Value | 2 (0x00000002) |
Een waarde van 0 voor ProcessNameFormat
geeft aan dat het standaardgedrag is ingeschakeld. Dat wil gezegd, Perfmon.exe prestatiemeteritems per toepassing weergeeft. Wanneer u deze waarde instelt op 2, Perfmon.exe meerdere versies van een toepassing ondubbelzinnig maken en prestatiemeteritems per runtime bieden. Elke andere waarde voor de ProcessNameFormat
registersleutelinstelling wordt niet ondersteund en gereserveerd voor toekomstig gebruik.
Nadat u de ProcessNameFormat
registersleutelinstelling hebt bijgewerkt, moet u Perfmon.exe of andere gebruikers van prestatiemeteritems opnieuw opstarten, zodat de nieuwe functie voor naamgeving van exemplaren correct werkt.
In het volgende voorbeeld ziet u hoe u de ProcessNameFormat
waarde programmatisch kunt wijzigen.
// 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()
Wanneer u deze registerwijziging aanbrengt en .NET Framework 4 of hoger is geïnstalleerd, geeft Perfmon.exe de namen van toepassingen weer als application_p
processID, waarbij de toepassing de naam van de toepassing is en processID de proces-id van de toepassing is. Als een toepassing met de naam myapp.exe bijvoorbeeld twee exemplaren van de algemene taalruntime laadt, kan Perfmon.exe één exemplaar identificeren als myapp_1416 en de tweede als myapp_3160.
Notitie
De proces-id elimineert de dubbelzinnigheid van het omzetten van twee toepassingen met dezelfde naam die eerdere versies van de runtime gebruiken. Een runtime-id is niet vereist voor eerdere versies, omdat eerdere versies van de algemene taalruntime geen ondersteuning bieden voor scenario's naast elkaar.
Als .NET Framework 4 of een latere versie niet aanwezig is of is verwijderd, heeft het instellen van de registersleutel geen effect. Dit betekent dat twee toepassingen met dezelfde naam blijven verschijnen in Perfmon.exe als toepassing en toepassing#1 (bijvoorbeeld als myapp en myapp#1).