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

À l’aide de l’Analyseur de performances (Perfmon.exe), il est possible de différencier les compteurs de performance pour chaque runtime. 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 performance pour chaque application. Toutefois, il existe deux scénarios dans lesquels cela pose problème :

  • Quand vous surveillez deux applications qui ont le même nom. Par exemple, si les deux applications se nomment MonApp.exe, l’une sera affichée en tant que MonApp et l’autre en tant que MonApp#1 dans la colonne Instance. Dans ce cas, il est difficile de faire correspondre un compteur de performance à une application particulière. On ne sait pas trop si les données recueillies pour MonApp#1 font référence à la première MonApp.exe ou à la deuxième MonApp.exe.

  • Quand une application utilise plusieurs instances du Common Language Runtime. Le .NET Framework 4 prend en charge les scénarios d’hébergement côte à côte in-process : autrement dit, un même processus ou une même application peut charger plusieurs instances du Common Language Runtime. Si une application nommée MonApp.exe charge deux instances d’exécution par défaut, elles sont désignées dans la colonne Instance en tant que MonApp et MonApp#1. Dans ce cas, il est difficile de savoir si MonApp et MonApp#1 font référence à deux applications portant le même nom ou à la même application avec deux runtimes. Si plusieurs applications du même nom chargent plusieurs runtimes, il y a encore plus d’ambiguïté.

Vous pouvez définir une clé de Registre pour lever cette ambiguïté. Pour les applications développées en utilisant le .NET Framework 4, cette modification du Registre ajoute un identificateur de processus suivi d’un identificateur d’instance de runtime au nom de l’application dans la colonne Instance. Au lieu de application ou application#1, l’application est maintenant identifiée comme application_pID_processus_rID_runtime dans la colonne Instance. Si une application a été développée en utilisant une version antérieure du Common Language Runtime, cette instance est représentée en tant que application_pID_processus à condition que le .NET Framework 4 soit installé.

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

Pour gérer les compteurs de performance pour plusieurs versions du Common Language Runtime hébergées dans une application unique, vous devez modifier un paramètre de clé de Registre, 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 pour ProcessNameFormat indique que le comportement par défaut est « Activé » ; autrement dit, Perfmon.exe affiche les compteurs de performance pour chaque application. Quand vous définissez cette valeur sur 2, Perfmon.exe lève l’ambiguïté liée aux versions multiples d’une application et fournit des compteurs de performance pour chaque runtime. Toute autre valeur pour le paramètre de clé de Registre ProcessNameFormat est non prise en charge et réservée à un usage ultérieur.

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 valeur ProcessNameFormat 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()

Quand vous apportez cette modification du Registre et si .NET Framework 4 ou ultérieur est installé, Perfmon.exe affiche les noms des applications en tant que application_pID_processus, où application est le nom de l’application et ID_processus l’identificateur du processus de l’application. Par exemple, si une application nommée MonApp.exe charge deux instances du Common Language Runtime, Perfmon.exe peut identifier une instance comme MonApp_1416 et la deuxième comme MonApp_3160.

Notes

L’identificateur de processus élimine l’ambiguïté liée à la résolution de deux applications du même nom qui utilisent des versions antérieures du runtime. Aucun identificateur de runtime n’est nécessaire pour les versions antérieures, 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 ultérieur 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 comme application et application#1 (par exemple, MonApp et MonApp#1).