如何通过Windows性能计数器API查询特定进程的磁盘IO读写速度?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1235个文字,预计阅读时间需要5分钟。
基本原因通常是计算器路径拼写错误或目标进程不存在。
Windows 性能计数器路径对大小写不敏感,但空白、斜杠、实例名必须严格匹配。
例如,获取某个进程的磁盘读取字节数,正确路径是:
实操建议:
- 先用
perfmon.exe手动添加相同计数器,确认路径有效;再复制路径到代码中 - 若进程名含空格(如
Visual Studio Code),路径中直接写Visual Studio Code即可,无需引号或转义 - 调用
PdhAddCounter后务必检查返回值,PDH_INVALID_DATA很可能意味着该进程此刻无磁盘 IO 活动(比如刚启动还没读写),不是路径错 - 同一进程多个实例(如多个
cmd.exe)时,路径应为"\Process(cmd#1)\IO Read Bytes/sec",可用PdhEnumObjectItems枚举所有实例名
如何用 PdhCollectQueryData 和 PdhGetFormattedCounterValue 获取实时速率值
性能计数器的“/sec”类值(如 IO Read Bytes/sec)本质是差分速率,需要至少两次采样才能算出。
本文共计1235个文字,预计阅读时间需要5分钟。
基本原因通常是计算器路径拼写错误或目标进程不存在。
Windows 性能计数器路径对大小写不敏感,但空白、斜杠、实例名必须严格匹配。
例如,获取某个进程的磁盘读取字节数,正确路径是:
实操建议:
- 先用
perfmon.exe手动添加相同计数器,确认路径有效;再复制路径到代码中 - 若进程名含空格(如
Visual Studio Code),路径中直接写Visual Studio Code即可,无需引号或转义 - 调用
PdhAddCounter后务必检查返回值,PDH_INVALID_DATA很可能意味着该进程此刻无磁盘 IO 活动(比如刚启动还没读写),不是路径错 - 同一进程多个实例(如多个
cmd.exe)时,路径应为"\Process(cmd#1)\IO Read Bytes/sec",可用PdhEnumObjectItems枚举所有实例名
如何用 PdhCollectQueryData 和 PdhGetFormattedCounterValue 获取实时速率值
性能计数器的“/sec”类值(如 IO Read Bytes/sec)本质是差分速率,需要至少两次采样才能算出。

