在Windows上以编程方式获取每个进程的磁盘IO统计信息?

9
我想展示一个进程(Windows,C++)列表和它们从磁盘读取和写入的速度,单位为KB/秒。
Windows 7 的资源监视器有这样的功能,所以我应该能够做到同样的事情。
然而,我无法找到相关的API调用或在perfmon计数器中找到任何内容。请问有人可以指导我吗?

我认为事件跟踪(ETW)是唯一的出路...但是好的ETW示例非常稀缺。 - dutchmega
2个回答

13
你可以调用 GetProcessIoCounters 来获取每个进程的磁盘 I/O 总体数据 - 你需要追踪增量并自行转换为基于时间的速率。

此 API 将告诉您 I/O 操作的总数以及总字节数。


如果那样做还不能解决问题,你可能需要深入挖掘并编写一个 WMI 查询。 - opello
5
GetProcessIoCounters()函数是否提供包括网络在内的所有I/O操作信息? - dutchmega
这可以为您提供磁盘I/O、网络I/O和其他功能,例如串行I/O。 - jossgray

4
只要您定期对其进行快照以获取某个“最近”时间段的差分统计信息,WMI 就可以胜任。 这篇文章 提供了一个非常混合的解决方案,其中 VBScript 从 WMI 中读取信息,Perl 则在 Windows 控制台中不断呈现信息。尽管语言混合有些奇怪,但我认为它是如何获得所需信息的很好的例子(当然,完全可以将所有内容重新编码为 C++)。

3
再次强调,总的I/O操作次数(与GetProcessIoCounters()相同)。 - dutchmega

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接