Ruby 文字列を連結する「+」と「<<」と「concat」と「join」のパフォーマンスを計測する

  • 作成日 2021.10.02
  • 更新日 2022.08.02
  • Ruby
Ruby 文字列を連結する「+」と「<<」と「concat」と「join」のパフォーマンスを計測する

Rubyで、benchmarkを使用して、文字列を連結する「+」と「<<」と「concat」と「join」のパフォーマンスを計測するサンプルコードを記述してます。rubyのバージョンは2.7.2を使用してます。

環境

  • OS windows10 pro 64bit
  • ruby 2.7.2p137

パフォーマンス計測

benchmarkを使用して、「+」と「<<」と「concat」と「join」を使用して、文字列を連結させるコードを1億回呼び出したパフォーマンスを計測するサンプルコードとなります。

require "benchmark"

# 繰り返し回数 1億回
i = 100000000

# 10は、reportラベルに使用する桁数
Benchmark.bm 10 do |r|
  r.report "#+" do
    i.times do
      "a" + "b"
    end
  end

  r.report "#<<" do
    i.times do
      "a" << "b"
    end
  end

  r.report "#concat" do
    i.times do
      "a".concat("b")
    end
  end

  r.report "#join" do
    i.times do
      %w(a b).join
    end
  end
end

実行結果

<1回目>
                 user     system      total        real
#+          11.781000   0.000000  11.781000 ( 11.826146)
#<<          9.828000   0.000000   9.828000 (  9.822869)
#concat     10.985000   0.000000  10.985000 ( 10.975017)
#join       21.843000   0.000000  21.843000 ( 21.871881)

<2回目>
                 user     system      total        real
#+          10.875000   0.000000  10.875000 ( 10.863067)
#<<         10.297000   0.000000  10.297000 ( 10.305066)
#concat     12.062000   0.000000  12.062000 ( 12.070342)
#join       21.609000   0.000000  21.609000 ( 21.638371)

<3回目>
                 user     system      total        real
#+          10.984000   0.000000  10.984000 ( 10.990497)
#<<          9.688000   0.000000   9.688000 (  9.672374)
#concat     11.391000   0.000000  11.391000 ( 11.394994)
#join       21.406000   0.000000  21.406000 ( 21.407953)

単純に連結させるだけなら、「<<」が一番早そうです。