2010-02-03 65 views
13

我有一个服务进程,我想使用性能计数器来发布完成任务所需的平均时间。我正在使用AverageTimer32计数器来执行此操作。使用性能计数器计算平均值

它几乎按照我想要的方式工作,但不是很完美:当我增加计数器时,它会暂时升高到我期望的值(在性能监视器中观看),但随后会降低到零。

所以,计数器是零,我运行一个任务,任务完成,计数器短暂地碰撞(到正确的值),但它几乎立即回落到零。

我使用的AverageTimer32计数器的AverageBase作为分母。每次开始任务时,我都将AverageBase加1,然后每次完成任务时,将AverageTimer32加上滴答数以完成。任何人都可以推我一下吗?

回答

16

事实证明,我不能做我想做的事的原因是没有性能计数器类型提供自动计算运行平均值。 (“平均”计数器,根据该时刻计算平均值,如“每秒字节数”)。

我想要一个运行平均值。所以,我使用了RawFraction性能计数器类型。

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

因此,我每增加一个操作(抵消百分比计算),就会将分数的分母递增100。

我的结果:我现在可以显示平均需要多长时间才能完成任务。如果我的服务不繁忙,平均数保持不变,这样您就可以看到我的服务表现的长期趋势。

+0

我有同样的问题,我试图使用AverageCount64,AverageTime32,但徒劳无功。感谢您回答您自己的问题并提供解释。 – 2011-04-26 15:38:24

+0

+1这也适用于我。优秀! – 2012-08-04 15:29:39