【问题标题】:Programmatically getting per-process disk io statistics on Windows?在 Windows 上以编程方式获取每个进程的磁盘 io 统计信息?
【发布时间】:2010-12-11 00:38:33
【问题描述】:

我想显示一个进程列表(Windows、C++)以及它们从磁盘读取和写入的数量(以 KB/秒为单位)。

Windows 7 的资源监视器有这个能力,所以我应该也能做到。

但是,我无法找到相关的 API 调用或在 perfmon 计数器中找到任何内容。谁能给我指个方向?

【问题讨论】:

  • 我认为事件跟踪 (ETW) 是唯一的出路……但是像样的 ETW 示例非常稀缺……

标签: c++ windows performance disk


【解决方案1】:

您可以致电 GetProcessIoCounters 以获取每个进程的整体磁盘 I/O 数据 - 您需要自己跟踪增量并转换为基于时间的速率。

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

【讨论】:

  • 如果这不能让你到达那里,你可能不得不四处挖掘并编写一个 WMI 查询。
  • GetProcessIoCounters() 不是为您提供包括网络在内的所有 IO 操作吗?
  • 这为您提供磁盘 i/o、网络 i/o 和其他,如串行 i/o
【解决方案2】:

WMI 可以做到,只要您定期对其进行快照以获取某个“最近”时间片的差异统计信息。 This post 提供了一种特殊的混合解决方案,VBScript 从 WMI 读取信息,Perl 不断在 Windows 控制台中呈现信息。尽管有奇怪的语言组合,但我认为它是如何获取所需信息的一个很好的例子(当然,应该很可能用 C++ 重新编码所有这些信息)。

【讨论】:

  • 再次,所有 IO 操作的总数(与 GetProcessIoCounters() 相同)
猜你喜欢
  • 2010-10-12
  • 1970-01-01
  • 2023-03-22
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-06
  • 1970-01-01
相关资源
最近更新 更多