说我有这样的基准测试结果:
0.020000 0.000000 0.020000 ( 0.020197)
我用
之类的东西来创建它Benchmark.bm do |x|
x.report { run_a_method() }
end
这表示一次调用方法foo
所需的时间。
我想制作一个基准,显示运行foo
3次的结果,但只需要调用一次方法。
这可以通过简单地将第一个基准中的值乘以3来完成。
有没有办法做到这一点?
我并不十分赞赏这些“不是正确的基准”的评论。我认识到多次运行它更准确,但这些是资源密集型测试,我只是预测多次运行的预期时间框架。
换句话说,我的用例只是为多运行时创建一个期望,而不是一个完全准确的期望。
答案 0 :(得分:1)
如您所说,推断的问题在于它会加重您所遇到的任何错误。运行N轮单一基准可以平衡任何违规行为。运行1轮并乘以N实际上会放大任何不规则性。
所以简短的回答是你不能。您需要运行多个测试才能更好地了解性能。如果这些测试需要很长时间才能运行,您要么必须花费成本,要么找到更快速运行它们的方法,或者以某种方式并行运行。
答案 1 :(得分:0)
自己想出来。
最初我尝试了以下内容:
report = Benchmark.bm do |x|
x.report { sleep.0.5 }
end
# => report is an array with
# 1 element
report * 2
# => shows an array with 2 elements
# (the first is duplicated)
但我最终想要尝试
report[0] * 2
具有将基准值加倍的预期效果。
例如,如果report
变量指向
[#<Benchmark::Tms:0x0055fcba149030
@label="",
@real=0.5001437529999748,
@cstime=0.0, @cutime=0.0,
@stime=0.0, @utime=0.0, @total=0.0>]
正在运行的puts (report[0] * 2)
显示
0.000000 0.000000
0.000000 ( 1.000288)
=> nil
这是我想要的乘法值。