在Ruby中,如何正确读取基准测试结果?

时间:2017-07-19 19:34:09

标签: ruby-on-rails ruby indexing benchmarking

我正在使用Rials 5.0.1。使用rails控制台,我想弄清楚在字符串中获取第一个正则表达式索引的最快方法是什么。所以我试过了下面的

2.4.0 :004 > Benchmark.bm do |x|
2.4.0 :005 >     x.report { 50000.times { a = 'a@b.c'.index(/\@/) } }
2.4.0 :006?>     x.report { 50000.times { a = 'a@b.c'.match(/\@/)[0] } }
2.4.0 :007?>   end
       user     system      total        real
   0.030000   0.000000   0.030000 (  0.026763)
   0.060000   0.000000   0.060000 (  0.064986)
 => [#<Benchmark::Tms:0x007fe974e13f88 @label="", @real=0.026763000059872866, @cstime=0.0, @cutime=0.0, @stime=0.0, @utime=0.03000000000000025, @total=0.03000000000000025>, #<Benchmark::Tms:0x007fe973c9e9d8 @label="", @real=0.06498600030317903, @cstime=0.0, @cutime=0.0, @stime=0.0, @utime=0.06000000000000005, @total=0.06000000000000005>]

我对如何阅读结果感到困惑。我认为&#34;它告诉我第一种方法平均需要&#34; .02&#34;秒,而第二个需要&#34; .06&#34;秒,所以我应该坚持&#34;索引&#34;。我读得对吗?

2 个答案:

答案 0 :(得分:1)

您可以使用总列。该时间不是平均值,而是该块执行的经过时间

  • 真实:你开始它和停止的时间之间的差异 - 挂钟时间。
  • 用户:执行流程所花费的CPU时间
  • sys:代表您的流程执行操作系统服务所花费的CPU时间

答案 1 :(得分:0)

“真实”是最简单且(可能)相关的东西。时钟经过的时间很简单。 t = Time.now; do_things; real=Time.now-t

您可以忽略其他列。

您说的是“平均值”-这不是平均值,它是您编写代码50,000次所需的时间。因此,一次执行的平均时间为real/50_000。 (但您无需计算该值即可知道索引更快)。