Pregunta

¿Alguien conoce algún método para crear contadores de rendimiento personalizados utilizando Visual C++ normal y no administrado?

Sé que se puede hacer fácilmente usando C++ administrado, pero necesito hacerlo usando un servicio de Windows no administrado.

También sé que puedes recuperar datos del contador de rendimiento, pero necesito crear algunos contadores personalizados e incrementarlos durante el tiempo de ejecución de las aplicaciones.

¿Fue útil?

Solución

Mira aquí:http://msdn.microsoft.com/en-us/library/aa371925.aspx

No es realmente difícil, pero sí un poco tedioso, ya que la API implica un uso extensivo de estructuras autorreferenciales de longitud variable y tiene que emplear algún mecanismo IPC para obtener los datos del proceso monitoreado.

Otros consejos

La compatibilidad para agregar contadores de rendimiento de C++ cambió en Vista y versiones posteriores.El enfoque Performance DLL sugerido en otra respuesta todavía funciona, pero la nueva técnica descrita aquí es más fácil de usar.

En este enfoque, escribe un manifiesto que describe sus contadores, ejecuta CTRPP, una herramienta que genera código a partir de su manifiesto.Compile y vincule este código con su aplicación, agregue una llamada para inicializar el proceso (inicia un hilo en segundo plano) y agregue código para actualizar los contadores según sea necesario.Los detalles de la publicación de los contadores son manejados por el hilo en segundo plano que ejecuta el código generado.

También necesita ejecutar lodctr /m:[archivo de manifiesto] para registrar sus contadores antes de que puedan usarse.Esto debe ejecutarse como administrador.

POR CIERTO:Otro programa, unlodctr, invierte el efecto de lodctr y debe usarse si realiza algún cambio en sus contadores porque no existe una operación de "reemplazo", solo elimina el antiguo y luego instala el nuevo.

<RANT>La documentación de todo lo anterior es simplemente horrible.Por ejemplo, lodctr fue completamente reelaborado para Vista, pero el documento en MSDN es solo para la versión XP y ya no se aplica.Si visita MSDN, utilice generosamente el botón "Esta documentación no es útil" y tal vez Microsoft reciba el mensaje.</RANT>

No utilice las clases de monitor de rendimiento ATL.Sé que son fáciles de agregar y tienen un asistente y todo, pero tienen errores irremediables.Los agregué a una de mis aplicaciones de desarrollo en el trabajo y luego tuve que revisar y extraer el código 6 meses después.En total, se perdieron unas 3 semanas de trabajo debido a ese ruido.

Estaba buscando algo un poco más fácil de implementar.Probablemente tendré que utilizar este enfoque.Un colega también me mostró (gracias PJ) que hay un tutorial de Scribble que se ha modificado para mostrar cómo agregar un contador de rendimiento usando clases ATL:Muestra de PerformanceScribble:Monitoreo del rendimiento en una aplicación MFC

El gran inconveniente aquí es que actualmente mi aplicación no usa MFC o ATL, y tendría que agregarle soporte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top