Страницы

Поиск по вопросам

суббота, 30 ноября 2019 г.

Быстродействие объединения строк

#c_sharp #строки


Какой способ объединения строк следует когда использовать.

1 способ: "а" + "b"
2 способ: String.Concat("a","b")
3 способ: StringBuilder db = new StringBuilder("a").Append("b")


С точки зрения быстродействия, какой способ следует использовать, когда строки маленькие,
 и объединения небольшие ( до 10 строк)?

Какой способ использовать, когда строки большие по объему?
    


Ответы

Ответ 1



Считается, что StringBuilder следует использовать в случае, если у вас происходит конкатенация больших строк и/или все это происходит в цикле с большим числом итераций. Это обусловлено тем, что строки неизменяемы, а потому при каждом изменении строки на самом деле создается новая. При этом StringBuilder этого недостатка лишён. Вот вам небольшой тест, который, впрочем, не претендует на всеобъемлющую точность. Имеем четыре метода: private static long Plus(int counts) { string res = ""; var watch = Stopwatch.StartNew(); for (var i = 0; i < counts; i++) { res = res + DateTime.Now.ToString(); } return watch.ElapsedMilliseconds; } private static long Concat(int counts) { string res = ""; var watch = Stopwatch.StartNew(); for (var i = 0; i < counts; i++) { res = String.Concat(res, DateTime.Now.ToString()); } return watch.ElapsedMilliseconds; } private static long Format(int counts) { string res = ""; var watch = Stopwatch.StartNew(); for (var i = 0; i < counts; i++) { res = String.Format("{0}{1}", res, DateTime.Now.ToString()); } return watch.ElapsedMilliseconds; } private static long Build(int counts) { StringBuilder res = new StringBuilder(); var watch = Stopwatch.StartNew(); for (var i = 0; i < counts; i++) { res = res.Append(DateTime.Now.ToString()); } string res2 = res.ToString(); return watch.ElapsedMilliseconds; } Первый - для "обычного" сложения строк, второй для String.Concat, третий для String.Format, четвёртый - для StringBuilder.Append. Прогоняем их через различное количество итераций. Получаем вот что: Plus(1000) - время выполнения 7 мс Concat(1000) - время выполнения 3 мс Format(1000) - время выполнения 8 мс Build(1000) - время выполнения < 1 мс Plus(2000) - время выполнения 13 мс Concat(2000) - время выполнения 11 мс Format(2000) - время выполнения 20 мс Build(2000) - время выполнения 1 мс Plus(5000) - время выполнения 66 мс Concat(5000) - время выполнения 56 мс Format(5000) - время выполнения 133 мс Build(5000) - время выполнения 2 мс Plus(10000) - время выполнения 266 мс Concat(10000) - время выполнения 248 мс Format(10000) - время выполнения 591 мс Build(10000) - время выполнения 5 мс Plus(20000) - время выполнения 1663 мс Concat(20000) - время выполнения 1624 мс Format(20000) - время выполнения 3925 мс Build(20000) - время выполнения 10 мс Выводы делайте сами UPD по немногочисленным заявкам трудящихся добавил метод для String.Format. Не бог весть что, но для полноты картины сойдёт.

Комментариев нет:

Отправить комментарий