Utilisation des fonctions de Registre pour consommer des données de compteur

Utilisez les fonctions de Registre pour collecter des données de performances à partir de la clé de Registre spéciale HKEY_PERFORMANCE_DATA .

Les données de performances ne sont pas réellement stockées dans le Registre. L’appel des fonctions de Registre amène le système à collecter les données auprès du fournisseur de données de performances approprié.

Notes

Normalement, vous ne devez pas utiliser les fonctions de Registre pour consommer des données de compteur. Au lieu de cela, vous devez utiliser les fonctions d’assistance aux données de performances (PDH). Les fonctions PDH sont plus faciles à utiliser et évitent de nombreux problèmes de performances et de fiabilité qui peuvent se produire en cas d’utilisation incorrecte des fonctions de Registre.

Notes

Vous ne pouvez pas utiliser les fonctions de Registre si vous écrivez des applications Windows OneCore. Utilisez plutôt les fonctions de consommateur PerfLib V2.

Les fonctions de Registre sont l’API de bas niveau permettant de collecter des données à partir de fournisseurs V1. Les fonctions de Registre prennent également en charge la collecte de données à partir de fournisseurs V2 via une couche de traduction qui appelle les fonctions de consommateur V2.

Pour obtenir des données de performances à partir du système local, appelez la fonction RegQueryValueEx . Utilisez HKEY_PERFORMANCE_DATA comme clé. Le premier appel ouvre la clé. Vous n’avez pas besoin d’ouvrir explicitement la clé d’abord.

Pour obtenir des données de performances à partir d’un système distant, appelez la fonction RegConnectRegistry . Utilisez le nom de l’ordinateur du système distant et utilisez HKEY_PERFORMANCE_DATA comme clé. Cet appel récupère une clé représentant les données de performances du système distant. Utilisez cette clé plutôt que HKEY_PERFORMANCE_DATA la clé pour récupérer les données.

Veillez à utiliser la fonction RegCloseKey pour fermer le handle à la clé lorsque vous avez terminé d’obtenir les données de performances. Ceci est important pour les cas locaux et distants :

  • RegCloseKey(HKEY_PERFORMANCE_DATA) ne ferme pas réellement un handle de Registre, mais efface toutes les données mises en cache et libère les DLL de performances chargées.
  • RegCloseKey(hkeyRemotePerformanceData) ferme le handle au registre de l’ordinateur distant.

Important

N’appelez RegCloseKey(HKEY_PERFORMANCE_DATA) pas pendant DLL_PROCESS_DETACH.

Vous utilisez le lpValueName paramètre de la fonction RegQueryValueEx pour indiquer les informations à récupérer. Le tableau suivant répertorie les valeurs que vous pouvez spécifier pour lpValueName. Notez que les chaînes de valeur ne respectent pas la casse.

Valeur Description
Global Récupère les données de performances de tous les objets de performances inscrits sur l’ordinateur, à l’exception de ceux inclus dans la Costly catégorie .
OLD_Global Windows Vista et versions ultérieures : Récupère les données de performances de tous les objets de performances V1 inscrits sur l’ordinateur, à l’exception de ceux inclus dans la Costly catégorie . Utilisez ceci au lieu de pour éviter de Global collecter des données de fournisseur V2 inutiles lorsque vous savez que les données intéressantes proviennent d’un fournisseur V1.
n1 n2 ... Récupère les données de performances d’un ou de plusieurs objets de performances. Spécifiez l’index décimal associé à chaque objet que vous souhaitez récupérer dans une liste séparée par des espaces. Par exemple, si vous souhaitez récupérer des objets Système et Mémoire et que vous avez déterminé que les index des chaînes de nom correspondantes sont 2 et 4, spécifiez la chaîne "2 4". Notez que la requête peut retourner un nombre d’objets différent de celui que vous avez demandé. Cela peut se produire si l’objet spécifié n’est pas disponible, si l’objet spécifié dépend d’un autre type d’objet ou si un fournisseur retourne des données qui n’ont pas été directement demandées. Par exemple, les threads dépendent de processus. Par conséquent, si vous demandez des données à partir de l’objet Thread , les résultats incluent les données de l’objet Process .
Counter n Récupère les chaînes de nom pour l’identificateur de langue spécifié, par exemple l’anglais pour Counter 9. Utilisez les chaînes de nom retournées pour rechercher l’index correspondant à un nom donné ou pour trouver le nom correspondant à un index donné. Pour plus d’informations, consultez Récupération des noms de compteurs et du texte d’aide . Notez que la liste retournée inclut à la fois les noms d’objets (counterset) et les noms de compteurs. Il n’existe aucun moyen simple de déterminer si un nom est un nom d’objet ou un nom de compteur.
Help n Récupère les chaînes d’aide pour l’identificateur de langue spécifié, par exemple l’anglais pour Help 9. Utilisez les chaînes d’aide retournées pour rechercher des descriptions correspondant à des index d’aide d’objet (counterset) ou de compteur. Pour plus d’informations, consultez Récupération des noms de compteurs et du texte d’aide .
Costly Déconseillée: Récupère les données de performances pour les types d’objets dont la collecte des données est coûteuse en termes de temps processeur ou d’utilisation de la mémoire. Cette collection peut prendre plusieurs minutes sur un ordinateur fortement chargé. Vous devez effectuer la collecte sur un thread de travail si votre application doit répondre à l’utilisateur lors de cette collecte de données.
MetadataGlobal Windows 10 20H1 et versions ultérieures : récupère les métadonnées de tous les objets de performances inscrits sur l’ordinateur, à l’exception de ceux inclus dans la Costly catégorie .
OLD_MetadataGlobal Windows 10 20H1 et versions ultérieures : récupère les métadonnées de tous les objets de performances V1 inscrits sur l’ordinateur, à l’exception de ceux inclus dans la Costly catégorie.
MetadataCostly Windows 10 20H1 et versions ultérieures : récupère les métadonnées pour les objets de performances coûteux.
OLD_MetadataCostly Windows 10 20H1 et versions ultérieures : récupère les métadonnées pour les objets de performances V1 coûteux.

Pour plus d’informations sur le format des données de performances retournées par le Registre, consultez Format des données de performances.

Pour obtenir un exemple qui obtient les noms et les descriptions des compteurs inscrits sur l’ordinateur, consultez Récupération des noms de compteurs et du texte d’aide.

Pour obtenir un exemple qui accède aux composants des données de performances, consultez Affichage des noms d’objet, d’instance et de compteur.

Pour obtenir un exemple qui récupère, calcule et imprime des valeurs de compteur, consultez Récupération des données de compteur et Calcul des valeurs de compteur.

Collection de métadonnées

Windows 10 20H1 ajoute la prise en charge des opérations de collecte de métadonnées uniquement. Ces opérations sont destinées à être utilisées lors de la création d’une liste des objets et compteurs de performances disponibles sur un ordinateur.

  • La collecte de métadonnées uniquement peut être plus rapide que la collection de données complètes correspondante, car elle peut ignorer la collecte de données instance à partir d’objets qui prennent en charge la collecte de métadonnées uniquement.
  • La collection de métadonnées uniquement utilise moins de mémoire que la collection de données complètes correspondante, car elle n’a pas besoin d’espace pour retourner instance données à partir d’objets qui prennent en charge la collecte de métadonnées uniquement.
  • La collection de métadonnées uniquement est plus complète que la collection de données complètes correspondante, car elle retourne la liste des compteurs disponibles même s’il n’existe aucune instance d’objets qui prend en charge la collection de métadonnées uniquement.

Conseil

Une utilisation appropriée de la collection de métadonnées uniquement est particulièrement importante lors de la collecte de données à partir de serveurs avec de nombreux processus ou threads. Une collection normale Global doit collecter et retourner des informations sur chaque processus et thread sur le système, tandis que MetadataGlobal la collecte n’a pas besoin de collecter des informations sur les processus ou les threads.

Les fonctions d’assistance des données de performances (PDH) utilisent automatiquement la collection de métadonnées uniquement lors de la détermination du jeu d’objets de performances disponibles sur un ordinateur.

La prise en charge du système d’exploitation pour les opérations de métadonnées uniquement est indiquée par une valeur différente de zéro dans la valeur de HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\Supports Metadata Registre. Si cette valeur n’est pas présente ou est définie sur 0, utilisez une collection de données complètes (par exemple Global) au lieu d’une collection de métadonnées uniquement (par exemple MetadataGlobal).

Tous les objets de performance ne prennent pas en charge la collecte de métadonnées uniquement. Lorsque vous demandez une MetadataGlobal collection, Windows case activée chaque objet de performance pour la prise en charge des métadonnées uniquement (indiquée par une valeur différente de zéro dans la valeur de HKLM\SYSTEM\CurrentControlSet\Services\<ServiceName>\Performance\Collect Supports Metadata Registre). Si l’objet de performance ne prend pas en charge la collecte de métadonnées uniquement, Windows effectue une collecte de données normale à partir de l’objet . Si l’objet de performance prend en charge la collecte de métadonnées uniquement, Windows effectue une collection de métadonnées uniquement à partir de l’objet . Les données qui vous sont retournées pour une requête de métadonnées uniquement contiennent alors des PERF_OBJECT_TYPE blocs provenant de la collection de données complètes et de métadonnées uniquement. Les PERF_OBJECT_TYPE blocs peuvent contenir ou omettre des informations instance, selon que le bloc a été collecté à partir d’un fournisseur qui prend ou non en charge les requêtes de métadonnées uniquement.

Les données retournées à partir d’une collection de métadonnées uniquement sont les mêmes que celles d’une collection normale, à l’exception de :

  • Le NumInstances champ du PERF_OBJECT_TYPE struct sera (PERF_METADATA_MULTIPLE_INSTANCESindiquant que l’objet prend en charge 0 ou plusieurs instances nommées) ou PERF_METADATA_NO_INSTANCES (indiquant que l’objet a toujours 1 instance sans nom).
  • Il n’y aura aucun PERF_INSTANCE_DEFINITION bloc après le PERF_OBJECT_TYPE struct.

Perflib

La HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib clé de Registre prend en charge plusieurs DWORD valeurs liées à la collecte de compteurs de performances. Ceux-ci doivent généralement être non défini pour le comportement par défaut, mais peuvent être configurés par un administrateur en fonction des besoins pour des scénarios spécifiques.

  • Configuration Flags: la valeur par défaut est 0. Peut être défini sur une combinaison des indicateurs suivants pour activer un comportement spécial :
    • 0x01: ne testez pas les plug-ins pour les erreurs d’alignement de la mémoire tampon de données. Par défaut, le système valide l’alignement de la mémoire tampon des plug-ins.
    • 0x02: ne désactivez pas automatiquement les plug-ins. Par défaut, le système désactive les plug-ins qui se bloquent ou présentent un comportement incorrect.
    • 0x04: ne validez pas l’intégrité de la mémoire tampon du plug-in. Par défaut, le système vérifie les dépassements de mémoire tampon du plug-in.
    • 0x08: ne case activée pas pour les délais d’expiration du plug-in. Par défaut, le système recherche les blocages du plug-in.
  • Disable Performance Counters: la valeur par défaut est 0. Si la valeur est 1, la collecte des compteurs de performances V1 est désactivée pour le système.
  • ExtCounterTestLevel: la valeur par défaut est 4. Contrôle la quantité de validation effectuée par le système pour se protéger contre un comportement incorrect du plug-in. Pour plus d'informations, consultez PM_COLLECT_PROC.