PdhGetFormattedCounterValue

PdhGetFormattedCounterValue

我试图理解性能API,但是我在理解PdhGetFormattedCounterValue函数和dwFormat参数时遇到了问题。

调用此函数时,如何知道要选择哪种格式?

我在MSDN上找到了PDH_COUNTER_INFO结构,并且看到该结构具有dwType成员,但是我仍然不明白如何使用该结构获取有关计数器格式的信息以成功调用PdhGetFormattedCounterValue函数。

最佳答案

您可以选择。

许多计数器是按分数计算的,或者它们是按比例缩放的,或者两者都按比例计算,因此它们具有分数部分。这使得PDH_FMT_DOUBLE是一个不错的选择。

一些计数器类型永远不会有小数部分。您可以阅读所有文档并找出其中的内容,然后添加两个代码路径来处理“可能是小数的计数器”和“不会是小数的计数器”,但这将花费大量的精力或精力。没有。

只需使用PDH_FMT_DOUBLE

更新资料

对于大多数计数器而言,精度仅是在PDH库中进行最终值计算的过程中要考虑的问题。但是,正如您所说,批量总计的精度(例如磁盘可用空间)可能是一个问题。幸运的是,事实并非如此。

双精度有52位有效数。对于以字节为单位报告的计数器,它可以容纳4 PB,而不会损失任何精度。

但是磁盘可用空间以兆字节而不是字节为单位报告,因此,双精度磁盘最多可以报告272个字节或4个ZB,而不会损失精度。而且我很确定您的单个卷不能超过264字节。

(进程等的)内存使用情况以字节为单位报告,但是值始终是页面大小的整数倍(4096字节),因此任何报告值的后12位均为零。因此,double可以表示最大264字节的内存大小,即整个64位内存空间,而不会损失精度。

精度不是问题。只需使用PDH_FMT_DOUBLE

关于c++ - PdhGetFormattedCounterValue和正确的格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15325013/

10-12 13:17