Ruby 配列の総和を求める場合のパフォーマンスを計測する

  • 作成日 2021.11.01
  • 更新日 2022.08.01
  • Ruby
Ruby 配列の総和を求める場合のパフォーマンスを計測する

Rubyで、benchmarkを使用して、配列の総和を求める場合のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

パフォーマンス計測

benchmarkを使用して、配列の総和を求める場合のパフォーマンスを計測するサンプルコードとなります。

require 'benchmark'

# 繰り返し回数
i = 1000000

# 配列を用意
arr = (1..5).to_a 

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|
  r.report '#join' do
    i.times do
        eval arr.join("+")
    end
  end

  r.report '#inject' do
    i.times do
        arr.inject(&:+)
    end
  end

  r.report '#each' do
    i.times do
        sum = 0
        (1..10).each do |i|
            sum += i
        end
    end
  end

  r.report '#block' do
    i.times do
        sum = 0
        (1..10).each{|x| sum += x}
    end
  end

  r.report '#sum' do
    i.times do
        arr.sum
    end
  end
end

実行結果

                 user     system      total        real
#join       10.562000   0.031000  10.593000 ( 12.877085)
#inject      1.047000   0.031000   1.078000 (  1.653925)
#each        0.891000   0.000000   0.891000 (  1.216039)
#block       0.578000   0.000000   0.578000 (  0.689920)
#sum         0.078000   0.000000   0.078000 (  0.106200)

joinが圧倒的に遅く、sumが圧倒的に速い結果となりました。