Prestandaräknare och processbaserade program sida vid sida
Kommentar
Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.
Med hjälp av prestandaövervakaren (Perfmon.exe) är det möjligt att särskilja prestandaräknare per körning. I det här avsnittet beskrivs den registerändring som krävs för att aktivera den här funktionen.
Standardbeteendet
Prestandaövervakaren visar som standard prestandaräknare per program. Det finns dock två scenarier där detta är problematiskt:
När du övervakar två program som har samma namn. Om båda programmen till exempel heter myapp.exe visas den ena som myapp och den andra som myapp#1 i kolumnen Instans . I det här fallet är det svårt att matcha en prestandaräknare med ett visst program. Det är oklart om de data som samlas in för myapp#1 refererar till den första myapp.exe eller den andra myapp.exe.
När ett program använder flera instanser av den gemensamma språkkörningen. .NET Framework 4 stöder processbaserade värdscenarier sida vid sida. en enda process eller ett program kan läsa in flera instanser av den gemensamma språkkörningen. Om ett enda program med namnet myapp.exe läser in två körningsinstanser anges de som standard i kolumnen Instans som myapp och myapp#1. I det här fallet är det oklart om myapp och myapp#1 refererar till två program med samma namn eller till samma program med två körningar. Om flera program med samma namn läser in flera körningar är tvetydigheten ännu större.
Du kan ange en registernyckel för att eliminera den här tvetydigheten. För program som utvecklats med hjälp av .NET Framework 4 lägger den här registerändringen till en processidentifierare följt av en körningsinstansidentifierare till programnamnet i kolumnen Instans . I stället för program eller program#1 identifieras programmet nu som application_p
processID_r
runtimeID i kolumnen Instance. Om ett program har utvecklats med hjälp av en tidigare version av den gemensamma språkkörningen representeras den instansen som application_p
processID förutsatt att .NET Framework 4 är installerat.
Prestandaräknare för processbaserade program sida vid sida
Om du vill hantera prestandaräknare för flera vanliga språkkörningsversioner som finns i ett enda program måste du ändra en enda registernyckelinställning, som du ser i följande tabell.
Värde | |
---|---|
Tangent | Hkey_local_machine\system\currentcontrolset\services\. NETFramework\Performance |
Format | ProcessNameFormat |
Typ | REG_DWORD |
Värde | 2 (0x00000002) |
Värdet 0 för ProcessNameFormat
anger att standardbeteendet är aktiverat, det vill Perfmon.exe visar prestandaräknare per program. När du anger det här värdet till 2 Perfmon.exe tvetydiga flera versioner av ett program och tillhandahåller prestandaräknare per körning. Andra värden för registernyckelinställningen ProcessNameFormat
stöds inte och är reserverade för framtida användning.
När du har uppdaterat registernyckelinställningen ProcessNameFormat
måste du starta om Perfmon.exe eller andra konsumenter av prestandaräknare så att den nya instansens namngivningsfunktion fungerar korrekt.
I följande exempel visas hur du ändrar ProcessNameFormat
värdet programmatiskt.
// 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()
När du gör den här registerändringen och om .NET Framework 4 eller senare installeras Perfmon.exe visar namnen på programmen som application_p
processID, där programmet är namnet på programmet, och processID är programmets processidentifierare. Om till exempel ett program med namnet myapp.exe läser in två instanser av den gemensamma språkkörningen kan Perfmon.exe identifiera en instans som myapp_1416 och den andra som myapp_3160.
Kommentar
Processidentifieraren eliminerar tvetydigheten i att matcha två program med samma namn som använder tidigare versioner av körningen. En körningsidentifierare krävs inte för tidigare versioner, eftersom tidigare versioner av common language runtime inte stöder scenarier sida vid sida.
Om .NET Framework 4 eller en senare version inte finns eller har avinstallerats har det ingen effekt att ange registernyckeln. Det innebär att två program med samma namn fortsätter att visas i Perfmon.exe som program och program #1 (till exempel som myapp och myapp#1).