Compartir a través de


Recopilación de datos de rendimiento

Después de crear una consulta y agregar contadores a ella, llame a la función PdhCollectQueryData para recuperar los datos sin procesar actuales de todos los contadores de la consulta.

Muchos contadores, como los contadores de velocidad, requieren dos ejemplos de datos para calcular un valor de datos con formato. El PDH mantiene los datos del ejemplo actual y del ejemplo recopilado anteriormente. En el procedimiento siguiente se describe cómo recopilar los valores de contador que requieren dos ejemplos para calcular un valor que se puede mostrar.

Para recopilar los valores de contador que requieren dos ejemplos para calcular un valor que se puede mostrar

  1. Llame a PdhCollectQueryData para recopilar el primer ejemplo.
  2. Llame a la función Sleep para esperar un mínimo de un segundo entre colecciones.
  3. Vuelva a llamar a PdhCollectQueryData para recopilar el segundo ejemplo.
  4. Llame a la función PdhGetFormattedCounterValue para calcular un valor que se puede mostrar.
  5. Repita los pasos 2 a 4.

Como alternativa a implementar un período de espera usted mismo, puede llamar a la función PdhCollectQueryDataEx, que crea un subproceso de tiempo que espera una cantidad de tiempo especificada, recopila el ejemplo y, a continuación, desencadena un evento definido por la aplicación.

Si desea consultar datos de rendimiento desde un archivo de registro, también puede definir un intervalo de tiempo. El intervalo de tiempo limita la consulta a las muestras recopiladas dentro del intervalo de tiempo (cada muestra contiene una marca de tiempo de cuando se recopiló). Para obtener más información sobre cómo establecer y recuperar intervalos de tiempo, vea Establecer un intervalo de tiempo para una consulta.

Si desea recopilar datos de rendimiento y escribirlos en un archivo de registro, llame a la función PdhUpdateLog en lugar de llamar a PdhCollectQueryData. Para obtener más información, consulte Trabajar con archivos de registro y Escribir los datos de rendimiento en un archivo de registro.

Para obtener más información sobre cómo calcular un valor de ejemplo que se puede mostrar, consulte Mostrar los datos de rendimiento.

Descripción de varios contadores de procesador

Algunos contadores de rendimiento se diseñaron para sistemas de procesador únicos y podrían no ser precisos para los equipos multiprocesador. Por ejemplo, un proceso se limita al 100 por ciento de un solo procesador; sin embargo, sus subprocesos pueden usar varios procesadores, lo que representa más del 100 %.

El valor del contador "\Processor(_Total)\% Processor Time" es el uso medio de todos los procesadores. Por ejemplo, si tiene dos procesadores, uno al 100 por ciento y otro al 0 por ciento, este contador notificará el 50 por ciento. Por lo tanto, el intervalo va de 0 a 100.

El valor del contador "\Process(X)\% Processor Time" (donde X es el nombre del proceso), el valor del contador es la suma del uso del procesador por todos los subprocesos del proceso X. Por ejemplo, en un equipo con dos procesadores, si un proceso tiene dos subprocesos, uno ocupando el 75 % de una CPU y el otro tomando el 80 % de otra CPU, este contador notificará el 155 %. El intervalo de este contador es de 0 a 100 * ProcessorCount.

Al usar el conjunto de contadores Process, puede recibir valores fuera del intervalo esperado de valores para el uso de CPU. Para calcular el porcentaje de uso de CPU, PDH necesita dos muestras (cada una con un valor sin procesar y una marca de tiempo). Dado que PDH usa solo el nombre de instancia para que coincida con los procesos, a veces puede mezclar muestras de diferentes procesos. Por ejemplo, si se muestrea un ejemplo de tres procesos con el mismo nombre de instancia y uno de los procesos finaliza después del tercer ejemplo, otro proceso se moverá a la ranura vacía por ese proceso terminado. Como resultado, un contador con formato proporcionará un valor incorrecto al dar formato a la cuarta muestra porque usa la tercera muestra del proceso terminado y la cuarta muestra del proceso que se movió al espacio del proceso terminado.

En la tabla siguiente se muestra cómo se puede producir esto si se finaliza un proceso mientras se recopilan los datos. En la tabla se muestran cinco ejemplos de valores de contador para tres instancias de proceso X. Los ejemplos se recopilan en intervalos de un segundo. Una vez recopilada la tercera muestra, se finaliza el proceso X en la ranura 1. Cuando finaliza el proceso X en la ranura 1, el proceso X en la ranura 2 se mueve a la ranura 1. Cuando se recopila la cuarta muestra para el proceso X en la ranura 2, el primer valor es ahora 20 en lugar de 1000 y el segundo valor es 1500. Al dar formato al valor del contador, obtendrá 1480 milisegundos en lugar de los 500 milisegundos esperados. Al dar formato al quinto valor de ejemplo, debería obtener el valor esperado.

Muestra Ranura 0 para el proceso X Ranura 1 para el proceso X Ranura 2 para el proceso X
Ejemplo 1 0 0 0
Ejemplo 2 20 10 500
Ejemplo 3 40 20 1,000
Ejemplo 4 60 1500 (del antiguo espacio 2) No aplicable. Ahora se recopila en la ranura 1.
Muestra 5 80 2.000 No aplicable. Ahora se recopila en la ranura 1.

Sugerencia

A partir de Windows 11, puedes evitar este problema mediante el nuevo conjunto de contadores Process V2. El conjunto de contadores Process V2 incluye el identificador de proceso en el nombre de la instancia. Esto evita los resultados incoherentes que aparecen con el conjunto de contadores original Process.