C# оптимизирует конкатенацию строковых литералов?

46
задан Strigoides 12 February 2014 в 00:26
поделиться

5 ответов

Да. Это гарантируется спецификацией C#. Это находится в разделе 7.18 (спецификации C# 3.0):

Каждый раз, когда выражение выполняет упомянутые выше требования, выражение оценено во время компиляции. Это верно, даже если выражение является подвыражением большего выражения, которое содержит непостоянные конструкции.

("Требования, упомянутые выше", включают +, оператор относился к двум константным выражениям.)

См. также этот вопрос .

50
ответ дан Edward Brey 26 November 2019 в 20:24
поделиться

Просто примечание стороны по связанному предмету - компилятор C# также 'оптимизирует' несколько конкатенаций, включающих нелитералы с помощью' +' оператор к единственному вызову к перегрузке мультипараметра Строки. Concat () метод.

Так

string result = x + y + z;

компиляции к чему-то эквивалентному

string result = String.Concat( x, y, z);

, а не более наивная возможность:

string result = String.Concat( String.Concat( x, y), z);

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

21
ответ дан Michael Burr 26 November 2019 в 20:24
поделиться

Да.

C# не только оптимизирует конкатенацию строковых литералов, это также сворачивает эквивалентные строковые литералы в константы и использует указатели для ссылки на все ссылки на ту же константу.

7
ответ дан FlySwat 26 November 2019 в 20:24
поделиться

Из первых уст:

Конкатенация является процессом добавления одной строки до конца другой строки. При конкатенации строковых литералов или строковых констант при помощи + оператор компилятор создает единственную строку. Никакая конкатенация времени выполнения не происходит. Однако строковые переменные могут быть связаны только во время выполнения. В этом случае необходимо понять последствия производительности различных подходов.

http://msdn.microsoft.com/en-us/library/ms228504.aspx

4
ответ дан phuclv 26 November 2019 в 20:24
поделиться

Я верю ответу на то, который является да, но необходимо было бы посмотреть на то, что компилятор выкладывает... просто компиляцию, и используйте отражатель на нем:-)

2
ответ дан Joel Martinez 26 November 2019 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: