Стоит ли использовать StringBuilder в веб-приложениях? - PullRequest
2 голосов
/ 23 января 2009

В веб-приложении я разделяю строки и присваиваю им имена ссылок или коллекции строк. Есть ли значительный выигрыш в производительности при использовании stringbuilder для веб-приложения?

РЕДАКТИРОВАТЬ: 2 функции: разбить ссылку на 5-10 строк. Затем переупаковка в другую строку. Кроме того, я добавляю одну строку за раз при щелчке ссылки.

Ответы [ 6 ]

12 голосов
/ 23 января 2009

Сколько строк вы будете объединять? Вы точно знаете, сколько их будет, или это зависит от того, сколько записей в базе данных и т. Д.?

См. мою статью на эту тему для получения более подробной информации и рекомендаций - но, по сути, находясь в веб-приложении, не имеет значения, насколько дорогой конкатенация строк по сравнению с использованием 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.

4 голосов
/ 23 января 2009

Вам стоит взглянуть на эту прекрасную статью Джона Скита о конкатенации строк.

4 голосов
/ 23 января 2009

Да, объединение обычных строк стоит дорого (действительно добавление строки к концу другой). Каждый раз, когда строка изменяется, .net удаляет старую строку и создает новую с новыми значениями. Это неизменный объект.

EDIT:

Stringbuilder следует использовать с осторожностью и оценивать как любой другой подход. Иногда объединение двух строк вместе будет более эффективным и должно оцениваться в каждом конкретном случае.

У Atwood есть интересная статья, связанная с этим.

2 голосов
/ 23 января 2009

Если вы создаете строку в цикле с большим количеством итераций, тогда стоит использовать stringbuilder. В противном случае лучше всего использовать конкатенацию строк.

2 голосов
/ 23 января 2009

Почему производительность может отличаться в веб-приложении или приложении winforms?

Использование stringbuilder - это хорошая практика, поскольку из-за выделения памяти и объектов правила применяются независимо от того, зачем вы создаете код.

1 голос
/ 23 января 2009

Во-первых, вы все еще пишете это приложение? Если да, то ОСТАНОВИТЕ Performance Tuning! Во-вторых, расставьте приоритеты над скоростью. Читаемость является более важным в долгосрочной перспективе по очевидным причинам. В-третьих, МЫ не знаем точную ситуацию и код, который вы пишете. Мы не можем посоветовать вам, важна ли эта микрооптимизация для производительности вашего кода или нет. ИЗМЕРЯЙТЕ разницу. Я очень рекомендую Ants Profiler от Red Gate.

...