Collecte des données de performances

Après avoir créé une requête et ajouté des compteurs, appelez la fonctionPdhCollectQueryData pour récupérer les données brutes actuelles pour tous les compteurs de la requête.

De nombreux compteurs, tels que les compteurs de débit, nécessitent deux exemples de données pour calculer une valeur de données mise en forme. PDH conserve les données de l’exemple actuel et de l’exemple précédemment collecté. La procédure suivante explique comment collecter des valeurs de compteur qui nécessitent deux exemples pour calculer une valeur affichable.

Pour collecter des valeurs de compteur qui nécessitent deux exemples pour calculer une valeur affichable

  1. Appelez PdhCollectQueryData pour collecter le premier exemple.
  2. Appelez la fonction Sleep pour attendre un minimum d’une seconde entre les regroupements.
  3. Appelez à nouveau PdhCollectQueryData pour collecter le deuxième exemple.
  4. Appelez la fonction PdhGetFormattedCounterValue pour calculer une valeur affichable.
  5. Répétez les étapes 2 à 4.

Au lieu d’implémenter vous-même une période d’attente, vous pouvez appeler la fonction PdhCollectQueryDataEx, elle crée un thread de minutage qui attend une durée spécifiée, collecte l’exemple, puis déclenche un événement défini par l’application.

Si vous souhaitez interroger des données de performances à partir d’un fichier journal, vous pouvez également définir un intervalle de temps. L’intervalle de temps limite la requête à ces échantillons qui ont été collectés dans l’intervalle de temps (chaque échantillon contient un horodatage pour le moment où il a été collecté). Pour plus d’informations sur la définition et la récupération des intervalles de temps, consultez Définition d’un intervalle de temps pour une requête.

Si vous souhaitez collecter des données de performances et l’écrire dans un fichier journal, vous devez appeler la fonction PdhUpdateLog au lieu d’appeler PdhCollectQueryData. Pour plus d’informations, consultez Utilisation des fichiers journaux et Écriture de données de performances dans un fichier journal.

Pour plus d’informations sur le calcul d’une valeur d’exemple affichable, consultez Affichage des données de performances.

Présentation de plusieurs compteurs de processeur

Certains compteurs de performances ont été conçus pour les systèmes à processeur unique et peuvent ne pas être précis pour les ordinateurs multiprocesseurs. Par exemple, un processus est limité à 100 % d’un seul processeur ; toutefois, ses threads peuvent utiliser plusieurs processeurs, ce qui totalise plus de 100 %.

La valeur du compteur « \Processor(_Total)\% Processor Time » correspond à l’utilisation moyenne de tous les processeurs. Par exemple, si vous avez deux processeurs, un à 100 % et un autre à 0 %, ce compteur signale 50 %. La plage est donc comprise entre 0 et 100.

Le « \Process(X)\% Processor Time » (où X est le nom du processus), la valeur du compteur correspond à la somme de l’utilisation du processeur par tous les threads du processus X. Par exemple, dans un ordinateur avec deux processeurs, si un processus a deux threads, l’un prenant 75 % d’un processeur et l’autre prenant 80 % d’un autre processeur, ce compteur signale 155 %. La plage de ce compteur est comprise entre 0 et 100 * ProcessorCount.

Lorsque vous utilisez le compteur Process, vous pouvez recevoir des valeurs en dehors de la plage attendue de valeurs pour l’utilisation du processeur. Pour calculer le pourcentage d’utilisation du processeur, PDH a besoin de deux exemples (chacun avec une valeur brute et un horodatage). Étant donné que PDH utilise uniquement le nom de l’instance pour correspondre aux processus, il peut parfois mélanger des échantillons de différents processus. Par exemple, si trois processus portant le même nom d’instance sont échantillonnés et qu’un des processus est arrêté après le troisième exemple, un autre processus passe à l’emplacement libéré par ce processus terminé. Par conséquent, un compteur mis en forme fournit une valeur incorrecte lorsque vous mettez en forme le quatrième exemple, car il utilise le troisième échantillon du processus terminé et le quatrième échantillon du processus qui a été déplacé dans l’emplacement du processus terminé.

Le tableau suivant montre comment cela peut se produire si un processus est arrêté pendant la collecte des données. Le tableau présente cinq exemples de valeurs de compteur pour trois instances de processus X. Les échantillons sont collectés à intervalles d’une seconde. Une fois le troisième échantillon collecté, le processus X dans l’emplacement 1 est arrêté. Lorsque le processus X dans l’emplacement 1 est arrêté, le processus X dans l’emplacement 2 passe à l’emplacement 1. Lorsque vous collectez le quatrième exemple pour le processus X dans l’emplacement 2, la première valeur est maintenant 20 au lieu de 1 000, et la deuxième valeur est 1 500. Lorsque vous mettez en forme la valeur du compteur, vous obtenez 1 480 millisecondes au lieu des 500 millisecondes attendues. Lorsque vous mettez en forme la cinquième valeur d’exemple, vous devez obtenir la valeur attendue.

Exemple Emplacement 0 pour le processus X Emplacement 1 pour le processus X Emplacement 2 pour le processus X
Exemple 1 0 0 0
Exemple 2 20 10 500
Exemple 3 40 20 1 000
Exemple 4 60 1 500 (à partir de l’ancien emplacement 2) Non applicable. La collecte se fait maintenant dans l’emplacement 1.
Échantillon 5 80 2 000 Non applicable. La collecte se fait maintenant dans l’emplacement 1.

Conseil

À compter de Windows 11, vous pouvez éviter ce problème à l’aide du nouvel ensemble de compteurs Process V2. Le compteur Process V2 inclut l’ID de processus dans le nom de l’instance. Cela évite les résultats incohérents qui apparaissent avec le compteur d’origine Process.