使用性能计数器计算平均值

15

我有一个服务进程,想要使用性能计数器来发布完成任务的平均时间。为此我使用了AverageTimer32计数器。

它几乎按照我的期望工作,但并不完全符合:当我增加计数器时,它会短暂地升高到我期望的值(通过Performance Monitor观察),但然后它立即降为零。

也就是说,计数器为零,我运行一个任务,任务完成,计数器短暂地升高(到正确的值),但几乎立即又降回到零。

我使用带有AverageBase作为分母的AverageTimer32计数器。 每次开始任务时,我将AverageBase增加1,然后每次完成任务时,我将AverageTimer32增加完成任务所需的滴答数。 有人可以给我提供一些帮助吗?

1个回答

17

事实证明,我无法实现想要的功能的原因是没有任何性能计数器类型提供自动计算运行平均值 (比如“每秒字节数”的“平均”计数器只会基于某个时刻计算平均值)。

我需要一种运行平均值,所以我使用了“RawFraction”性能计数器类型。

但是这种方法存在一个问题:该公式将结果除以100以产生百分比,而我需要的是原始数字(平均每秒完成的操作次数)。

因此,我每完成1个操作就将分母增加100(抵消百分比计算),得到的结果是:我现在可以显示我的服务完成任务的平均时间。如果我的服务不忙,平均值保持不变,这样您就可以看到我的服务性能的长期趋势。


我曾经遇到过同样的问题,尝试使用了AverageCount64和AverageTime32,但都没有成功。感谢您回答自己的问题并提供解释。 - sh_kamalh

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