Стоит ли использовать StringBuilder в веб-приложениях?
-
19-08-2019 - |
Вопрос
В веб-приложении я разделяю строки и присваиваю имена ссылкам или коллекциям строк.Есть ли значительный выигрыш в производительности при использовании построителя строк для веб-приложения?
РЕДАКТИРОВАТЬ:2 функции:разбиение ссылки на 5-10 строк.Затем переупаковка в другую строку.Кроме того, я добавляю по одной строке к ссылке каждый раз, когда ссылка нажимается.
Решение
Сколько строк вы будете объединять? Вы точно знаете, сколько их будет, или это зависит от того, сколько записей в базе данных и т. Д.?
См. мою статью на эту тему для получения дополнительной информации и рекомендаций - но в основном Находясь в веб-приложении, не имеет значения, насколько дорогая конкатенация строк по сравнению с использованием StringBuilder.
РЕДАКТИРОВАТЬ: я боюсь, что все еще не совсем ясно из вопроса, что именно вы делаете. Если у вас есть фиксированный набор строк для конкатенации, и вы можете сделать все это за один раз, то это быстрее и, вероятно, более читабельно сделать это с помощью конкатенации. Например:
string faster = first + " " + second + " " + third + "; " + fourth;
string slower = new StringBuilder().Append(first)
.Append(" ")
.Append(second)
.Append(" ")
.Append(third)
.Append("; ")
.Append(fourth)
.ToString();
Другой альтернативой является использование строки формата, конечно. Это может быть самый медленный, но самый читаемый:
string readable = string.Format("{0} {1} {2}; {3}",
first, second, third, fourth);
В части вашего вопроса упоминается " добавление ссылки каждый раз " хотя для этого аспекта предлагается использовать StringBuilder - все, что естественным образом приводит к циклу, более эффективно (для средних и больших чисел) с использованием StringBuilder.
Другие советы
Вам следует взглянуть на эту замечательную статью Джона Скита о объединяющие строки.
Да, объединение обычных строк требует больших затрат (на самом деле добавление одной строки в конец другой).Каждый раз, когда строка изменяется, .net удаляет старую строку и создает новую с новыми значениями.Это неизменяемый объект.
РЕДАКТИРОВАТЬ:
Stringbuilder следует использовать с осторожностью и оценивать, как и любой другой подход.Иногда соединение двух строк вместе будет более эффективным, и его следует оценивать в каждом конкретном случае.
Почему производительность может отличаться в веб-приложении или приложении winforms?
Использование stringbuilder является хорошей практикой, поскольку из-за выделения памяти и объектов правила применяются независимо от того, зачем вы создаете код.
Если вы создаете строку в цикле с большим количеством итераций, то рекомендуется использовать stringbuilder. В противном случае лучше всего использовать конкатенацию строк.
Во-первых, вы все еще пишете это приложение? Если да, то ОСТАНОВИТЕ Performance Tuning! Во-вторых, расставьте приоритеты над скоростью. Читаемость является более важным в долгосрочной перспективе по очевидным причинам. В-третьих, МЫ не знаем точную ситуацию и код, который вы пишете. Мы не можем посоветовать вам, важна ли эта микрооптимизация для производительности вашего кода или нет. ИЗМЕРЯЙТЕ разницу. Я очень рекомендую Ants Profiler от Red Gate.