Condividi tramite


Contatori delle prestazioni e applicazioni affiancate in-process

Nota

Questo articolo è specifico per .NET Framework. Non si applica alle implementazioni più recenti di .NET, incluse .NET 6 e versioni successive.

Con Performance Monitor (Perfmon.exe) è possibile distinguere i contatori delle prestazioni in base al runtime. Questo argomento descrive la modifica del Registro di sistema necessaria per abilitare questa funzionalità.

Comportamento predefinito

Per impostazione predefinita, Performance Monitor visualizza i contatori delle prestazioni in base all'applicazione. In due scenari, tuttavia, ciò può rappresentare un problema:

  • Quando viene eseguito il monitoraggio di due applicazioni con lo stesso nome. Ad esempio, se entrambe le applicazioni sono denominate app.exe, una verrà visualizzata come app e l'altra come app#1 nella colonna Istanza. In questo caso, è difficile associare un contatore delle prestazioni a un'applicazione specifica. Non è chiaro se i dati raccolti per app #1 fanno riferimento alla prima o alla seconda app.exe.

  • Quando un'applicazione usa più istanze di Common Language Runtime. .NET Framework 4 supporta scenari di hosting side-by-side in-process, ovvero un singolo processo o una singola applicazione può caricare più istanze di 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. 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. Se più applicazioni con lo stesso nome caricano più runtime, l'ambiguità è ancora maggiore.

È possibile impostare una chiave del Registro di sistema per evitare questa ambiguità. Per le applicazioni sviluppate con .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. Anziché come applicazione o applicazione#1, l'applicazione è ora identificata come applicazione_pIDprocesso_rIDruntime nella colonna Istanza. 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.

Contatori delle prestazioni per applicazioni affiancate in-process

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.

Valore
Chiave HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance
Movimento ProcessNameFormat
Type REG_DWORD
valore 2 (0x00000002)

Il valore 0 per ProcessNameFormat indica che è abilitato il comportamento predefinito, ovvero Perfmon.exe visualizza i contatori delle prestazioni in base alle singole applicazioni. Quando si imposta questo valore su 2, Perfmon.exe risolve l'ambiguità per 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 usi futuri.

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.

L'esempio seguente mostra come modificare il valore ProcessNameFormat a livello di codice.

// 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 e se è installato .NET Framework 4 o versione successiva, Perfmon.exe visualizza i nomi delle applicazioni come applicazione_pIDprocesso, dove applicazione è il nome dell'applicazione e IDprocesso è l'identificatore del processo dell'applicazione. Ad esempio, se un'applicazione denominata app.exe carica due istanze di Common Language Runtime, Perfmon.exe può identificare un'istanza come app_1416 e la seconda come app_3160.

Nota

L'identificatore di processo elimina l'ambiguità per la risoluzione di due applicazioni con lo stesso nome che usano versioni precedenti del runtime. Un identificatore di runtime non è obbligatorio per le versioni precedenti, perché le versioni precedenti di Common Language Runtime non supportano gli scenari affiancati.

Se .NET Framework 4 o versione successiva non è presente o è stato disinstallato, l'impostazione della chiave del Registro di sistema non ha alcun effetto. 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).