Dela via


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

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

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