かってにインパクトファクター

子育てサラリーマンが日々の雑多なことをつらつらと綴ってます。時々政治ネタ経済ネタコンピュータネタなどをはさみます。

ruby ベンチマーク string1

rubyでは文字列の連結でかなり速度差があるということを聞いたので、本当かどうかを確かめるために、ベンチマークを取ってみました。


先に結果から

                                     user     system      total        real
string + string                  2.109000   1.141000   3.250000 (  3.258173)
concat                           0.016000   0.000000   0.016000 (  0.028001)
string << string                 0.031000   0.000000   0.031000 (  0.026002)

単純に計算すると、なんと100倍以上。本当かな。
でも、ちょっとリファクタリングするときには気をつけないと行けないかも。


環境は

OS 名:                  Microsoft Windows 8.1 Pro
プロセッサ:             Core i5-4570 CPU 3.2GHz
物理メモリの合計:       8.0 GB
ruby 2.0.0p481 (2014-05-08) [x64-mingw32]

ソース

require 'benchmark'

loop_count = 100000

Benchmark.bm(30) do |x|
  
  x.report('string + string'){
    a = 'a'
    loop_count.times{|i|
      a += 'a'
    }
  }
  
  x.report('concat'){
    a = 'a'
    loop_count.times{|i|
      a.concat('a')
    }
  }
  
  x.report('string << string'){
    a = 'a'
    loop_count.times{|i|
      a <<= 'a'
    }
  }
end