如何查看哪种方法运行得更快

Jgo*_*o83 3 ruby

如何确定哪种方法运行得更快?很难在Ruby文档中阅读Benchmark并实际实现它.谢谢

def count_between(list_of_integers, lower_bound, upper_bound)
  count = 0
  list_of_integers.each do |x|
    (x >= lower_bound && x <= upper_bound) ? count += 1 : next
  end
  count
end
Run Code Online (Sandbox Code Playgroud)

要么

def count_between(list_of_integers, lower_bound, upper_bound)
 count = 0
 list_of_integers.each do |x|
   count += 1 if x.between?(lower_bound, upper_bound) 
 end
 count
end
Run Code Online (Sandbox Code Playgroud)

Fre*_*ung 5

基准测试的问题在于,对于执行速度非常快的事情,您需要多次运行测试以确保结果.Benchmark不会给你任何帮助 - 你最终在你的report块中有循环并且修改重复的执行计数.

benchmark-myps gem为您做了一些.基本用法与stdlib版本几乎相同:

require 'benchmark/ips'

#define your methods and test data here.
Benchmark.ips do |x|
  x.report 'count between 1' do
    count_between_1(list_of_integers, lower_bound, upper_bound)
  end

  x.report 'count between 2' do
    count_between_2(list_of_integers, lower_bound, upper_bound)
  end
end
Run Code Online (Sandbox Code Playgroud)

产生类似的输出

 count between 1    143.377  (± 4.9%) i/s -    728.000 
 count between 2     64.489  (± 4.7%) i/s -    324.000 
Run Code Online (Sandbox Code Playgroud)

这使得更容易看出结果是否显着.