Ruby

Rubyベンチマーク集

  • 気になったものをどんどんベンチマークをとって比較していきます

ベンチマークテンプレート

  • ベンチマークのコードは共通なので、最初に書いておきます
require 'benchmark'

Benchmark.bmbm(10) do |r|
  r.report "test1" do
    # exec test1
  end
  r.report "test2" do
    99999999.times do |i|
      test2(i)
    end
  end
end

偶奇判定

コード

  • 先ずは奇数判定から
require 'benchmark'

def test1(n)
  n.odd?
end

def test2(n)
  n & 1 == 1
end

Benchmark.bmbm(10) do |r|
  r.report "test1" do
    99999999.times do |i|
      test1(i)
    end
  end
  r.report "test2" do
    99999999.times do |i|
      test2(i)
    end
  end
end

結果

  • odd?の方が早い
Rehearsal ----------------------------------------------
test1        7.950000   0.010000   7.960000 (  7.984393)
test2        8.820000   0.020000   8.840000 (  8.868345)
------------------------------------ total: 16.800000sec

                 user     system      total        real
test1        7.810000   0.010000   7.820000 (  7.841257)
test2        8.770000   0.020000   8.790000 (  8.803263)

コード

  • お次は偶数
def test1(n)
  n.even?
end

def test2(n)
  n & 1 == 0
end

結果

  • こちらもevenの方が早い
Rehearsal ----------------------------------------------
test1        8.240000   0.060000   8.300000 (  8.447544)
test2        9.810000   0.070000   9.880000 ( 10.163554)
------------------------------------ total: 18.180000sec

                 user     system      total        real
test1        8.190000   0.050000   8.240000 (  8.424226)
test2        9.430000   0.060000   9.490000 (  9.701474)