Какой способ объединения строк следует когда использовать.
1 способ: "а" + "b"
2 способ: String.Concat("a","b")
3 способ: StringBuilder db = new StringBuilder("a").Append("b")
С точки зрения быстродействия, какой способ следует использовать, когда строки маленькие, и объединения небольшие ( до 10 строк)?
Какой способ использовать, когда строки большие по объему?
Ответ
Считается, что 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. Не бог весть что, но для полноты картины сойдёт.
Комментариев нет:
Отправить комментарий