Partager via


Compteurs de performance et applications côte à côte in-process

Remarque

Cet article est spécifique à .NET Framework. Elle ne s’applique pas aux implémentations plus récentes de .NET, notamment .NET 6 et versions ultérieures.

À l’aide de l’Analyseur de performances (Perfmon.exe), il est possible de différencier les compteurs de performances par exécution. Cette rubrique décrit la modification du Registre nécessaire pour activer cette fonctionnalité.

Comportement par défaut

Par défaut, l’Analyseur de performances affiche les compteurs de performances par application. Toutefois, il existe deux scénarios dans lesquels cela pose problème :

  • Lorsque vous surveillez deux applications portant le même nom. Par exemple, si les deux applications sont nommées myapp.exe, l’une s’affiche en tant que myapp et l’autre en tant que myapp#1 dans la colonne Instance . Dans ce cas, il est difficile de faire correspondre un compteur de performances à une application particulière. Il n’est pas clair si les données collectées pour myapp#1 font référence au premier myapp.exe ou au deuxième myapp.exe.

  • Lorsqu’une application utilise plusieurs instances du Common Language Runtime. .NET Framework 4 prend en charge les scénarios d’hébergement parallèles dans le processus ; autrement dit, un processus ou une application unique peut charger plusieurs instances du Common Language Runtime (environnement d'exécution de langage commun). Si une seule application nommée myapp.exe charge deux instances d’exécution, par défaut, elles sont désignées dans la colonne Instance en tant que myapp et myapp#1. Dans ce cas, il n’est pas clair si myapp et myapp#1 font référence à deux applications portant le même nom ou à la même application avec deux runtimes. Si plusieurs applications portant le même nom chargent plusieurs runtimes, l’ambiguïté est encore plus grande.

Vous pouvez définir une clé de Registre pour éliminer cette ambiguïté. Pour les applications développées à l’aide du .NET Framework 4, cette modification de Registre ajoute un identificateur de processus suivi d’un identificateur d’instance d’exécution au nom de l’application dans la colonne Instance . Au lieu de l’application ou de l’application#1, l’application est maintenant identifiée comme application_pprocessID_rruntimeID dans la colonne Instance . Si une application a été développée à l’aide d’une version précédente du Common Language Runtime, cette instance est représentée comme application_pprocessID à condition que .NET Framework 4 soit installé.

Compteurs de performance pour les applications côte à côte in-process

Pour gérer les compteurs de performances pour plusieurs versions common language runtime hébergées dans une seule application, vous devez modifier un paramètre de clé de Registre unique, comme indiqué dans le tableau suivant.

Valeur
Clé HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\.NETFramework\Performance
Entrée ProcessNameFormat
Type REG_DWORD
Valeur 2 (0x00000002)

La valeur 0 indique ProcessNameFormat que le comportement par défaut est activé ; autrement dit, Perfmon.exe affiche les compteurs de performances par application. Lorsque vous définissez cette valeur sur 2, Perfmon.exe désambigue plusieurs versions d’une application et fournit des compteurs de performances par runtime. Toute autre valeur du paramètre de clé de registre n’est pas prise en charge et est réservée pour une utilisation ultérieure.

Après avoir mis à jour le paramètre de clé de Registre ProcessNameFormat, vous devez redémarrer Perfmon.exe ou tout autre consommateur de compteurs de performance afin que la nouvelle fonctionnalité de nommage d’instance fonctionne correctement.

L’exemple suivant montre comment modifier la ProcessNameFormat valeur par programmation.

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

Lorsque vous apportez cette modification de Registre et que .NET Framework 4 ou version ultérieure est installé, Perfmon.exe affiche les noms des applications comme application_pprocessID, où l’application est le nom de l’application et processID est l’identificateur de processus de l’application. Par exemple, si une application nommée myapp.exe charge deux instances du Common Language Runtime, Perfmon.exe peut identifier une instance comme myapp_1416 et la seconde comme myapp_3160.

Remarque

L’identificateur de processus élimine l’ambiguïté de la résolution de deux applications portant le même nom que celles qui utilisent les versions antérieures du runtime. Un identificateur de runtime n’est pas requis pour les versions précédentes, car les versions précédentes du Common Language Runtime ne prennent pas en charge les scénarios côte à côte.

Si le .NET Framework 4 ou une version ultérieure n’est pas présent ou a été désinstallé, la définition de la clé de Registre n’a aucun effet. Cela signifie que deux applications portant le même nom continueront d’apparaître dans Perfmon.exe en tant qu’application et application#1 (par exemple, en tant que myapp et myapp#1).