- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一段如下代码:
为了测试,我调用方法ComputeAndLog,在性能监视器中我可以看到非零平均值。然而,一旦我结束测试,平均性能计数器值就会降至零。知道为什么会这样吗?
可能我使用了错误的计数器?
我的要求是我有一个函数,并且我必须计算该函数平均需要多少时间才能完成。如下所示:
void ComputeAndLog()
{
Stopwatch stopWatch = Stopwatch.StartNew();
FunctionWhoseAveragetTimeIsToBeMeasured();
write_counter(stopWatch.ElapsedTicks);
}
void write_counter(long timeForCompletion)
{
averageTimeCounter.IncrementBy(timeForCompletion);
averageBaseCounter.Increment();
}
谢谢xoxo
最佳答案
AverageTimer32/64 不会计算您执行的所有测量的平均值。相反,它提供了测量值与测量操作数的比率。
基本上,您的代码的问题在于您每次执行测量时都使用新的计时器。
要了解 AverageTimer 的工作原理,了解其背后的公式可能会有所帮助。这也解释了为什么需要 AverageBase 才能使用 AverageTimer。
AverageTimer 的公式如下:
((N1 - N0) / F) / (B1 - B0)
与
简而言之,公式采用当前时间(以刻度为单位)并减去前一个时间。结果除以因子 F 即可得出自上次在 t-1 进行测量以来操作运行的时间。
现在将其除以当前计数器减去之前的计数器。这通常可能是其中之一。这样您就可以得到一次测量的平均操作时间。
使用 AverageBase,您现在可以跨过各种测量点。考虑这样一种情况,您只能在每执行十次操作时设置一次计数器。自上次测量以来,您将为所有 10 个操作将 AverageTimer 增加新的时间测量值,但将 AverageBase 增加 10。最终,您将收到一项操作的平均时间(即使您已经测量了所有十个操作调用)。
查看您的代码示例,您始终发送从计时器开始到计时器结束的差异。让它成为一系列数字,例如 10, 9, 8, 7 ,6,同时将 AverageBase 增加 1。
对于第二次测量,您将收到以下结果:
(9 - 10)/F/(1 - 0) = -1/F/1
为了简单起见,F 为 1,结果将是 -1。
但是要提交的正确值应该是
10、19、27、34、40
我们将再次得到相同的示例
(19 - 10)/F/(1 - 0) = 9/F/1
同样,当 F 为 1 时,您的平均操作时间将为 9。正如您所看到的,下一个测量的值需要大于前一个值,这样 AverageTimer 才能正常工作。
在您的示例中,您可能会使用全局秒表。使用 Start() (而不是 Restart())而不是重新启动它。如上所示,计数器将在内部计算时间差。这样您就能得到正确的测量结果。
归零也是有意义的,一旦完成测试或程序结束,计数器可能会关闭并且不再提供任何值。您可以通过调用计数器上的 Close() 方法来手动完成此操作。
关于.net - AverageTimer32 计数器值变为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710463/
我正在编写一个微型基准测试来比较使用 + 运算符与 StringBuilder 的字符串串联。为此,我创建了一个基于 OpenJDK example that uses the batchSize p
我是一名优秀的程序员,十分优秀!