文字列の連結

Rubyにおける文字列の連結に関してどの方法で処理した方がコストが小さいかを調べてみます。PerlJavaでの経験上ある程度の予測は付きますが。

テスト1: "+"による連結

buf = ''
for i in 1..100000
    buf += 'abc'
end

テスト2: "<<"(concat)による連結

buf = ''
for i in 1..100000
    buf << 'abc'
end

テスト3: 配列のjoin

arr = []
for i in 1..100000
    arr.push('abc')
end
buf = arr.join()

結果

テスト1 +による連結 29.462s
テスト2 concatによる連結 0.138s
テスト3 配列のjoin 0.150s

テスト1が異常なほど時間がかかっているのは、Stringオブジェクトの生成コストのためであるのは明らかでしょう。やってはいけない典型例ですね。
テスト2が一番良い結果となりました。
テスト3はテスト2には少し劣りますがそんなに悪い結果ではありません。
文字列を繰り返して連結する場合はconcatを使うのが良いでしょう。