2

我在使用性能监控 API 的 Vista 上遇到了一个奇怪的问题。我目前正在使用基于 PdhGetFormattedCounterValue() 在 XP/2k 上运行良好的代码。我开始使用 PdhExpandWildCardPath 来扩展计数器(我对整体网络统计数据感兴趣),我正在查看的计数器是:

\\网络接口(*)\\接收的字节数/秒
\\网络接口(*)\\字节发送/秒
\\Processor(_Total)\\% 处理器时间

问题是他们在第一次调用时返回 PDH_INVALID_DATA,我认为这不是问题,因为如果我再次查询它,我将开始获取数据而不会出现错误。问题是这样的——虽然处理器时间完全按照预期工作,但网络接口计数器都没有返回任何东西——一直都是 0。我使用 Perfmon 验证他们正在正常报告数据,所以我不知道可能是什么问题。我在 MS 发现了这个:

http://support.microsoft.com/?scid=kb%3Ben-us%3B287159&x=11&y=9

但我对我的任务的多语言不感兴趣,所以我认为这无关紧要。我会看看我是否能想出一些基本代码来准确显示我在做什么,但是没有返回任何奇怪的东西,而且它在 XP/2k 上工作,所以我怀疑引擎盖下发生了一些变化。谢谢!

4

1 回答 1

1

事实证明,问题在于网络接口都是通配符,而处理器一个实际上已经被性能监控卷起来了。我没有意识到 PdhExpandWildCardPath 没有返回 PdhAddCounter 可以直接使用的东西。我的意思是,如果 ExpandWildCard 返回 3 个扩展匹配项,它们会以空分隔字符串的形式返回 - 我理解这一点,但我假设 AddCounter 将有效地创建一个包含所有三个匹配项的计数器。不,现实是我需要分解每条路径并从 AddCounter 单独请求它,然后在获得结果时手动汇总结果。

希望这可以帮助其他人避免我犯的同样的错误,减少挫败感。;)

于 2009-07-12T17:23:46.157 回答