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



我正在使用Rails 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>]

我对如何阅读结果感到困惑。 我"认为"它告诉我第一种方法平均需要".02"秒,而第二种方法需要".06"秒,所以我应该坚持使用"索引"。 我没看错吗?

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

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

real"是最简单和(可能(相关的东西。这只是时钟上经过的时间量。t = Time.now; do_things; real=Time.now-t.

您可以忽略其他列。

你说"平均值" - 这不是平均值,而是执行代码 50,000 次所需的时间。所以做一次的平均时间是real/50_000.(但你不需要计算这个就知道索引更快(。

最新更新