С http://yassershaikh.com/what-is-the-difference-between-strings-and-stringbuilder-in-c-net/
Краткий ответ: String является неизменной - тогда как StringBuilder является изменяемой.
Что это значит?
Вики говорит: В объектно-ориентированном виде неизменный объект - это объект, состояние которого нельзя изменить после его создания. Это отличается от изменчивого объекта, который можно изменить после его создания.
Из документации класса StringBuilder:
Объект String является неизменным. Каждый раз, когда вы используете один из методов в классе System.String, вы создаете новый строковый объект в памяти, который требует нового выделения пространства для этого нового объекта.
В ситуациях, когда вам необходимо выполнить повторные модификации строки, накладные расходы, связанные с созданием нового объекта String, могут быть дорогостоящими.
Класс System.Text.StringBuilder может использоваться, когда вы хотите изменить строку без создания нового объекта. Например, использование класса StringBuilder может повысить производительность при объединении множества строк в цикле.