2009-10-28 19 views
6

Me gustaría mostrar una lista de procesos (Windows, C++) y cuánto están leyendo y escribiendo desde el disco en KB/seg.¿Obtiene programáticamente estadísticas de disco io por proceso en Windows?

El monitor de recursos de Windows 7 tiene la capacidad, así que debería poder hacer lo mismo.

Sin embargo, no he podido encontrar una llamada de API relevante ni encontrar nada en los contadores de perfmon. ¿Alguien podría apuntarme en la dirección?

+0

Creo que el seguimiento de eventos (ETW) es el único camino a seguir ... Pero los ejemplos decente de ETW son muy escasos. – dutchmega

Respuesta

11

Puede llamar al GetProcessIoCounters para obtener datos generales de E/S del disco por proceso; necesitará hacer un seguimiento de los deltas y convertirlos a una tasa basada en el tiempo usted mismo.

Esta API le indicará el número total de operaciones de E/S, así como el total de bytes.

+0

Si eso no te lleva hasta allí, es posible que debas buscar y escribir una consulta WMI. – opello

+4

¿GetProcessIoCounters() no le proporciona todas las operaciones de IO, incluida la red? – dutchmega

+0

¿es una función de controlador io? –

3

WMI puede hacerlo, siempre y cuando realice una instantánea periódica para obtener estadísticas diferenciales para un segmento de tiempo "reciente". This post presenta una solución mixta peculiar, con VBScript leyendo la información de WMI y Perl continuamente presentando la información en una consola de Windows. A pesar de la extraña mezcla de idiomas, creo que es un buen ejemplo de cómo obtener el tipo de información que necesita (debería ser posible recodificar todo en C++, por supuesto).

+3

Nuevamente, el total de todas las operaciones de IO (lo mismo que GetProcessIoCounters()) – dutchmega

Cuestiones relacionadas