Фиксированное количество конкатенаций .NET строк - PullRequest
0 голосов
/ 28 июля 2011

"... класс String предпочтителен для операции конкатенации, если объединено фиксированное число объектов String. В этом случае отдельные операции конкатенации могут даже быть объединены компилятором в одну операцию.

Объект StringBuilder предпочтительнее для операции конкатенации, если конкатенируется произвольное количество строк ...«в первом абзаце.Разве это не должно быть "обязательно будет"?Потому что без объединения конкатенаций в одну операцию повторное выделение памяти String сделает его абсолютно хуже StringBuilder.

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

Ну, это также не может быть никакой заметной разницы. Честно говоря, они будут смехотворно близки для тривиальных конкатенаций, но: для прямой конкатенации «n» строк в одной операции Concat (aka +) будет светить; длина и т. д. может быть рассчитана эффективно, а затем это просто копирование. В цикле StringBuilder будет светить.

Когда вы Concat за одну операцию :

string s = a + b + c + x + y + z;

Это действительно:

string s = string.Concat(a, b, c, x, y, z);

Что составляет один только дополнительная строка.

0 голосов
/ 28 июля 2011

Полагаю, вы могли бы написать код таким образом, чтобы компилятор не объединял его в один. Но если вы пишете код так, как того хочет Microsoft, он должен сделать это за одну операцию.

0 голосов
/ 28 июля 2011

Это говорит о том, что если длина строки может быть определена во время компиляции, компилятор автоматически объединит ее для вас в более эффективное представление. Однако, если длина не может быть рассчитана во время компиляции, вам следует использовать StringBuilder.

«Может даже быть», если вы объединяете только две строки неопределенной длины, может быть быстрее использовать String. Чем больше строк объединяется, тем больше пользы от StringBuilder.

...