2009-10-28 10 views
6

Vorrei visualizzare un elenco di processi (Windows, C++) e quanto stanno leggendo e scrivendo dal disco in KB/sec.Avere programmaticamente statistiche del disco per processo su Windows?

Il monitor risorse di Windows 7 ha la capacità, quindi dovrei essere in grado di fare lo stesso.

Tuttavia non riesco a trovare una chiamata API pertinente o trovare nulla nei contatori perfmon. Qualcuno potrebbe indicarmi la direzione?

+0

Penso che l'event tracing (ETW) sia l'unico modo per andare ... Ma gli esempi di ETW decenti sono molto scarsi .. – dutchmega

risposta

11

È possibile chiamare GetProcessIoCounters per ottenere i dati di I/O del disco per processo: è necessario tenere traccia dei delta e convertirli in base al tempo.

Questa API indicherà il numero totale di operazioni di I/O e di byte totali.

+0

Se questo non ti porta lì, potresti dover scavare intorno e scrivere una query WMI. – opello

+4

Non GetProcessIoCounters() fornisce tutte le operazioni di I/O inclusa la rete? – dutchmega

+0

è una funzione io driver? –

3

WMI può farlo, a patto che lo si effettui periodicamente per ottenere statistiche differenziali per qualche "recente" intervallo di tempo. This post presenta una soluzione particolarmente mista, con VBScript che legge le informazioni da WMI e Perl che presentano continuamente le informazioni in una console Windows. Nonostante lo strano mix linguistico, ritengo che rappresenti un buon esempio di come ottenere il tipo di informazioni richieste (dovrebbe essere possibile ricodificare tutto in C++, ovviamente).

+3

Ancora, il totale di tutte le operazioni di I/O (uguale a GetProcessIoCounters()) – dutchmega

Problemi correlati