Dela via


Prestandaräknare och In-Process sidoprogram förBy-Side

Anmärkning

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.

Det förvalda beteendet

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.exevisas 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 Common Language Runtime (CLR). .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 Instance 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 runtime-miljöer ä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_pprocessID_rruntimeID 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_pprocessID förutsatt att .NET Framework 4 är installerat.

Prestandamätare för In-Process sida-vid-sida-applikationer

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
Nyckel HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance
Inträde Processnamnsformat
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, löser Perfmon.exe tvetydigheter mellan flera versioner av en applikation och tillhandahåller prestandaövervakning per körningsmiljö. 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, visar Perfmon.exe namnen på program som application_pprocessID, 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.

Anmärkning

Process-ID eliminerar tvetydigheten i att lösa två applikationer med samma namn som använder tidigare versioner av körningsmiljön. En körningsidentifierare krävs inte för tidigare versioner, eftersom tidigare versioner av den gemensamma språkliga exekveringsmiljön inte stöder parallella scenarier.

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).