Позвольте мне показать вам весь мой опыт с этим.
У меня был запрос, который возвращал 32 тыс. Записей, для каждой записи я вызывал метод для форматирования этой записи базы данных в форматированную строку и затем объединял ее в строку, которая в конце всего этого процесса превращается в файл в диск.
Моя проблема заключалась в том, что, согласно записи, около 24 Кб процесс объединения строк включал боль.
Я делал это, используя обычный оператор «+».
Когда я перешел на «<<», это было похоже на магию. Было действительно быстро. </p>
Итак, я вспомнил свои старые времена - вроде 1998 года - когда я использовал Java и сцеплял String с помощью '+' и изменил с String на StringBuffer (и теперь у нас, разработчика Java, есть StringBuilder).
Я считаю, что процесс + / << в мире Ruby такой же, как + / StringBuilder.append в мире Java. </p>
Первый перераспределяет весь объект в памяти, а другой просто указывает на новый адрес.