+ ou .concat, o que é mais rápido para anexar string em Ruby?

Problema:

Ontem eu tive que acrescentar cerca de ~ 100-200K pequenas strings (comprimento médio 7) para formar uma única string grande. Eu tinha usado + operador e era muito lento. Para encontrar uma alternativa mais rápida, fiz o seguinte experimento de benchmarking:

Solução:

TL; DR: use em .concatvez de+

def bm_concat limit
str
= ""
limit
.times do
str
.concat("abcdefg")
end
end

def bm_plus limit
str
= ""
limit
.times do
str
+= "abcdefg"
end
end

def diff t1, t2
puts
(t2-t1)
end

limit
= ARGV[0]
which
= ARGV[1]

puts
"LIMIT: #{limit} , WHICH: #{which}"
if which == "plus"
t
= Time.now
bm_plus limit
.to_i
t2
= Time.now
else
t
= Time.now
bm_concat limit
.to_i
t2
= Time.now
end

diff
(t,t2)

Ao substituir +por .concatno meu código original, foi 4x mais rápido!

Os resultados do código acima para vários parâmetros são:

Cenário