Ruby / 文字列の追加処理のパフォーマンス比較
Rubyで、ある文字列の後に別の文字列を追加(連結)したい場合、<<や+=などいくつか方法があります。
どれが一番早いのか気になったのでパフォーマンスを比較してみました。
require "benchmark" Benchmark.bm do |x| str = ''; x.report('+=') { 10000.times{ str += "abcdefg" } } str = ''; x.report('<<') { 10000.times{ str << "abcdefg" } } str = ''; x.report('+') { 10000.times{ str = str + "abcdefg" } } str = ''; x.report('#{}') { 10000.times{ str = "#{str}abcdefg" } } end
結果は・・・
user system total real
+= 0.220000 0.420000 0.640000 ( 0.643629)
<< 0.000000 0.000000 0.000000 ( 0.007104)
+ 0.220000 0.410000 0.630000 ( 0.638200)
#{} 0.230000 0.440000 0.670000 ( 0.698459)
ということで、<<演算子の圧勝という結果になりました。
+や#{}が遅いのは何となく分かりますが、+=のパフォーマンスが想像以上に悪かったのが驚きです。
パフォーマンス重視のプログラムで文字列の結合をする場合には、できるだけ<<演算子を使うようにすると良いかもしれません。
以上、ご参考まで。
1 Comment
Jump to comment form | comments rss [?] | trackback uri [?]