Contatori delle prestazioni e applicazioni affiancate in-processPerformance Counters and In-Process Side-By-Side Applications

Con Performance Monitor (Perfmon.exe) è possibile distinguere i contatori delle prestazioni in base al runtime.Using the Performance Monitor (Perfmon.exe), it is possible to differentiate the performance counters on a per-runtime basis. Questo argomento descrive la modifica del Registro di sistema necessaria per abilitare questa funzionalità.This topic describes the registry change needed to enable this functionality.

Comportamento predefinitoThe Default Behavior

Per impostazione predefinita, Performance Monitor visualizza i contatori delle prestazioni in base all'applicazione.By default, the Performance Monitor displays performance counters on a per-application basis. In due scenari, tuttavia, ciò può rappresentare un problema:However, there are two scenarios in which this is problematic:

  • Quando viene eseguito il monitoraggio di due applicazioni con lo stesso nome.When you monitor two applications that have the same name. Ad esempio, se entrambe le applicazioni sono denominate app.exe, una verrà visualizzata come app e l'altra come app#1 nella colonna Istanza.For example, if both applications are named myapp.exe, one will be displayed as myapp and the other as myapp#1 in the Instance column. In questo caso, è difficile associare un contatore delle prestazioni a un'applicazione specifica.In this case, it is difficult to match a performance counter to a particular application. Non è chiaro se i dati raccolti per app #1 fanno riferimento alla prima o alla seconda app.exe.It is not clear whether the data collected for myapp#1 refers to the first myapp.exe or the second myapp.exe.

  • Quando un'applicazione usa più istanze di Common Language Runtime.When an application uses multiple instances of the common language runtime. .NET Framework 4.NET Framework 4 supporta scenari di hosting side-by-side, ovvero un singolo processo o una singola applicazione può caricare più istanze di Common Language Runtime.The .NET Framework 4.NET Framework 4 supports in-process side-by-side hosting scenarios; that is, a single process or application can load multiple instances of the common language runtime. Se una singola applicazione denominata app.exe carica due istanze di runtime, per impostazione predefinita verranno designate come app e app#1 nella colonna Istanza.If a single application named myapp.exe loads two runtime instances, by default, they will be designated in the Instance column as myapp and myapp#1. In questo caso, non è chiaro se app e app#1 fanno riferimento a due applicazioni con lo stesso nome o alla stessa applicazione con due runtime.In this case, it is not clear whether myapp and myapp#1 refer to two applications with the same name, or to the same application with two runtimes. Se più applicazioni con lo stesso nome caricano più runtime, l'ambiguità è ancora maggiore.If multiple applications with the same name load multiple runtimes, the ambiguity is even greater.

È possibile impostare una chiave del Registro di sistema per evitare questa ambiguità.You can set a registry key to eliminate this ambiguity. Per le applicazioni sviluppate con .NET Framework 4.NET Framework 4, questa modifica del Registro di sistema aggiunge un identificatore di processo seguito da un identificatore dell'istanza di runtime al nome dell'applicazione nella colonna Istanza.For applications developed using the .NET Framework 4.NET Framework 4, this registry change adds a process identifier followed by a runtime instance identifier to the application name in the Instance column. Anziché come applicazione o applicazione#1, l'applicazione è ora identificata come applicazionepIDprocesso\rIDruntime nella colonna Istanza.Instead of application or application#1, the application is now identified as applicationpprocessID\rruntimeID in the Instance column. Se un'applicazione è stata sviluppata con una versione precedente di Common Language Runtime, questa istanza viene rappresentata come applicazione_pIDprocesso, purché sia stato installato .NET Framework 4.NET Framework 4.If an application was developed using a previous version of the common language runtime, that instance is represented as application_pprocessID provided that the .NET Framework 4.NET Framework 4 is installed.

Contatori delle prestazioni per applicazioni affiancate in-processPerformance Counters for In-Process Side-by-Side Applications

Per gestire i contatori delle prestazioni per più versioni di Common Language Runtime ospitate in una singola applicazione, è necessario modificare una chiave del Registro di sistema, come illustrato nella tabella seguente.To handle performance counters for multiple common language runtime versions that are hosted in a single application, you must change a single registry key setting, as shown in the following table.

Nome della chiaveKey name HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\PerformanceHKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance
Nome valoreValue name ProcessNameFormatProcessNameFormat
Tipo valoreValue type REG_DWORDREG_DWORD
ValoreValue 1 (0x00000001)1 (0x00000001)

Il valore 0 per ProcessNameFormat indica che è abilitato il comportamento predefinito, ovvero Perfmon.exe visualizza i contatori delle prestazioni in base alle singole applicazioni.A value of 0 for ProcessNameFormat indicates that the default behavior is enabled; that is, Perfmon.exe displays performance counters on a per-application basis. Quando si imposta questo valore su 1, Perfmon.exe risolve l'ambiguità per più versioni di un'applicazione e fornisce i contatori delle prestazioni in base al runtime.When you set this value to 1, Perfmon.exe disambiguates multiple versions of an application and provides performance counters on a per-runtime basis. Qualsiasi altro valore per l'impostazione della chiave del Registro di sistema ProcessNameFormat non è supportato ed è riservato per usi futuri.Any other value for the ProcessNameFormat registry key setting is unsupported and reserved for future use.

Dopo aver aggiornato l'impostazione della chiave del Registro di sistema ProcessNameFormat, è necessario riavviare Perfmon.exe o qualsiasi altro consumer di contatori delle prestazioni, in modo che la nuova funzionalità di denominazione delle istanze funzioni correttamente.After you update the ProcessNameFormat registry key setting, you must restart Perfmon.exe or any other consumers of performance counters so that the new instance naming feature works correctly.

L'esempio seguente mostra come modificare il valore ProcessNameFormat a livello di codice.The following example shows how to change the ProcessNameFormat value programmatically.

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

Quando si apporta questa modifica al Registro di sistema, Perfmon.exe visualizza i nomi delle applicazioni destinate a .NET Framework 4.NET Framework 4 come applicazionepIDprocesso\rIDruntime, dove applicazione è il nome dell'applicazione, IDprocesso è l'identificatore del processo dell'applicazione e IDruntime è un identificatore di Common Language Runtime.When you make this registry change, Perfmon.exe displays the names of applications that target the .NET Framework 4.NET Framework 4 as applicationpprocessID\rruntimeID, where application is the name of the application, processID is the application's process identifier, and runtimeID is a common language runtime identifier. Ad esempio, se un'applicazione denominata app.exe carica due istanze di Common Language Runtime, Perfmon.exe può identificare un'istanza come app_p1416_r10 e la seconda come app_p3160_r10.For example, if an application named myapp.exe loads two instances of the common language runtime, Perfmon.exe may identify one instance as myapp_p1416_r10 and the second as myapp_p3160_r10. L'identificatore di runtime risolve solo eventuali ambiguità per i runtime all'interno di un processo e non fornisce informazioni sul runtime.The runtime identifier only disambiguates the runtimes within a process; it does not provide any other information about the runtime. (Ad esempio, l'ID di runtime non ha alcuna relazione con la versione o lo SKU del runtime.)(For example, the runtime ID has no relation to the version or the SKU of the runtime.)

Se è installato .NET Framework 4.NET Framework 4, la modifica del Registro di sistema interessa anche le applicazioni sviluppate con le versioni precedenti di .NET Framework.If the .NET Framework 4.NET Framework 4 is installed, the registry change also affects applications that were developed using earlier versions of the .NET Framework. Questi elementi vengono visualizzati in Perfmon.exe come applicazione_pIDprocesso, dove applicazione è il nome dell'applicazione e IDprocesso è l'identificatore di processo.These appear in Perfmon.exe as application_pprocessID, where application is the application name and processID is the process identifier. Ad esempio, se vengono monitorati i contatori delle prestazioni di due applicazioni denominate app.exe, una potrebbe essere visualizzata come app_p23900 e l'altra come app_p24908.For example, if the performance counters of two applications named myapp.exe are monitored, one might appear as myapp_p23900 and the other as myapp_p24908.

Nota

L'identificatore di processo elimina l'ambiguità per la risoluzione di due applicazioni con lo stesso nome che usano versioni precedenti del runtime.The process identifier eliminates the ambiguity of resolving two applications with the same name that use earlier versions of the runtime. Un identificatore di runtime non è obbligatorio per le versioni precedenti, perché le versioni precedenti di Common Language Runtime non supportano gli scenari affiancati.A runtime identifier is not required for previous versions, because previous versions of the common language runtime do not support side-by-side scenarios.

Se .NET Framework 4.NET Framework 4 non è presente o è stato disinstallato, l'impostazione della chiave del Registro di sistema non ha alcun effetto.If the .NET Framework 4.NET Framework 4 is not present or was uninstalled, setting the registry key has no effect. Questo significa che due applicazioni con lo stesso nome continueranno a essere visualizzate in Perfmon.exe come applicazione e applicazione#1 (ad esempio, come app e app#1).This means that two applications with the same name will continue to appear in Perfmon.exe as application and application#1 (for example, as myapp and myapp#1).