Metrika

21 декабря 2011 г.

C#: Конкатенация строк, StringBuilder vs +

В Сети много пишут о работе со строками в .Net. Что касательно конкатенации, я давно уже знал, что при небольших конкатенациях (несколько строк) лучше использовать +, а при конкатенации в циклах лучше использовать StringBuilder. Но ни когда не подозревал на сколько лучше тот или иной метод.
При написании прототипа нового проекта вообще не обратил на это внимания и для вывода массива объектов в JSON написал вот так:
string s_json = "[";

foreach (Building b in arr) {
     s_json += b.ToJSON() + ",";
}

На маленьких массивах проблем с производительностью не наблюдалось, но при тестах на более менее вменяемых данных (около 15000 записей) этот код на ноуте выполнялся 2 мин!!! Epic Fail!!

Тот же код с использованием StringBuilder на тех же данных выполняется секунду!! Прирост производительност более чем в сто раз на не очень больших объемах данных:

StringBuilder sb_json = new StringBuilder("[");

foreach (Building b in arr) {
            sb_json.AppendFormat("{0},", b.ToJSON());
}
Интересные ссылки:
1. Работа со строками. Строковые функции
2.  String concatenation the fast way...maybe not