Contatori delle prestazioni e applicazioni affiancate in-process
Tramite Performance Monitor (Perfmon.exe) è possibile distinguere i contatori delle prestazioni in base al runtime. Questo argomento descrive come modificare il Registro di sistema per abilitare questa funzionalità.
Comportamento predefinito
Per impostazione predefinita, Performance Monitor visualizza i contatori delle prestazioni in base all'applicazione. Esistono tuttavia due scenari in cui ciò risulta problematico:
Quando si esegue il monitoraggio di due applicazioni aventi lo stesso nome. Ad esempio, se entrambe le applicazioni sono denominate myapp.exe, una verrà visualizzata come myapp e l'altra come myapp#1 nella colonna Istanza. In questo caso risulta difficile abbinare un contatore delle prestazioni a una determinata applicazione. Non è chiaro se i dati raccolti per myapp#1 si riferiscono al primo myapp.exe o al secondo myapp.exe.
Quando un'applicazione utilizza più istanze di Common Language Runtime. .NET Framework versione 4 supporta scenari affiancati in-process. In altre parole, un solo processo o applicazione può caricare più istanze di Common Language Runtime. Se una sola applicazione denominata myapp.exe carica due istanze di runtime, per impostazione predefinita queste verranno definite nella colonna Istanza come myapp e myapp#1. In questo caso non è chiaro se myapp e myapp#1 si riferiscono a due applicazioni con lo stesso nome o alla stessa applicazione con due runtime. Se più applicazioni con lo stesso nome caricano più runtime, l'ambiguità risulta essere ancora maggiore.
Per eliminare questa ambiguità è possibile impostare una chiave del Registro di sistema. Per le applicazioni sviluppate tramite .NET Framework 4, questa modifica del Registro di sistema comporta l'aggiunta di un identificatore del processo seguito da un identificatore dell'istanza di runtime al nome dell'applicazione nella colonna Istanza. Anziché essere definita come applicazione o applicazione#1, l'applicazione viene identificata con applicazione_pIDprocesso_rIDruntime nella colonna Istanza. Se un'applicazione è stata sviluppata utilizzando una versione precedente di Common Language Runtime, tale istanza viene rappresentata come applicazione_pIDprocesso, purché sia stato installato .NET Framework 4.
Contatori delle prestazioni per le applicazioni affiancate in-process
Per gestire i contatori delle prestazioni per più versioni di Common Language Runtime ospitate in un'unica applicazione è necessario modificare una sola impostazione della chiave del Registro di sistema, come mostrato nella tabella seguente.
Nome della chiave |
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance |
Nome del valore |
ProcessNameFormat |
Tipo di valore |
REG_DWORD |
Valore |
1 (0x00000001) |
Il valore 0 per ProcessNameFormat indica che il comportamento predefinito è abilitato; ovvero, Perfmon.exe visualizza i contatori delle prestazioni in base all'applicazione. Quando si imposta questo valore su 1, Perfmon.exe risolve l'ambiguità relativa a più versioni di un'applicazione e fornisce i contatori delle prestazioni in base al runtime. Qualsiasi altro valore per l'impostazione della chiave del Registro di sistema ProcessNameFormat è non supportato ed è riservato per un utilizzo futuro.
Una volta aggiornata l'impostazione della chiave del Registro di sistema ProcessNameFormat, è necessario riavviare Perfmon.exe o qualsiasi altro utente dei contatori delle prestazioni in modo che la nuova funzionalità di denominazione dell'istanza funzioni correttamente.
Nell'esempio seguente viene mostrato come modificare il valore ProcessNameFormat a livello di codice.
' 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()
// 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();
Quando si applica questa modifica al Registro di sistema, Perfmon.exe visualizza i nomi delle applicazioni indirizzate a .NET Framework 4 come applicazione_pIDprocesso_rIDruntime, dove applicazione è il nome dell'applicazione, IDprocesso è l'identificatore del processo dell'applicazione e IDruntime è un identificatore di Common Language Runtime. Ad esempio, se un'applicazione denominata myapp.exe carica due istanze di Common Language Runtime, Perfmon.exe può identificare un'istanza come myapp_p1416_r10 e l'altra come myapp_p3160_r10. L'identificatore di runtime si limita a eliminare l'ambiguità fra i runtime all'interno di un processo. Non fornisce nessun'altra informazione sul runtime. Ad esempio, l'identificatore di runtime non è correlato in alcun modo alla versione o alla SKU del runtime.
Se è stato installato .NET Framework 4, la modifica del Registro di sistema interessa anche le applicazioni sviluppate utilizzando versioni precedenti di .NET Framework. Queste applicazioni vengono visualizzate in Perfmon.exe come applicazione_pIDprocesso, dove applicazione è il nome dell'applicazione e IDprocesso è l'identificatore del processo. Ad esempio, se si esegue il monitoraggio dei contatori delle prestazioni di due applicazioni denominate myapp.exe, una potrebbe essere visualizzata come myapp_p23900 e l'altra come myapp_p24908.
Nota |
---|
L'identificatore del processo elimina l'ambiguità della risoluzione di due applicazioni con lo stesso nome che utilizzano versioni precedenti di runtime.Per le versioni precedenti non è necessario utilizzare un identificatore di runtime, poiché le versioni precedenti di Common Language Runtime non supportano scenari affiancati. |
Se .NET Framework 4 non è presente o è stato disinstallato, l'impostazione della chiave del Registro di sistema non ha alcun effetto. Ciò significa che due applicazioni con lo stesso nome continueranno a essere identificate in Perfmon.exe come applicazione e applicazione#1 (ad esempio, myapp e myapp#1).