Что является более эффективным: жестко закодированные строки в коде - или-- повторное использование ссылки на строку? - PullRequest
2 голосов
/ 18 июля 2011

было интересно, какой из следующих вариантов более эффективен. Есть предложения?

Листинг 1

string header = "Header 1"; // create a string variable and reuse
client.AddMessage(header, ...);
client.AddMessage(header, ...);
client.AddMessage(header, ...);
client.AddMessage(header, ...);
client.AddMessage(header, ...);
...

Листинг 2

client.AddMessage("Header 1", ...); // hard code the string in each call
client.AddMessage("Header 1", ...);
client.AddMessage("Header 1", ...);
client.AddMessage("Header 1", ...);
client.AddMessage("Header 1", ...);
....

Ответы [ 8 ]

6 голосов
/ 18 июля 2011

Вам, вероятно, не стоит беспокоиться о такого рода (возможно) микрооптимизации: что здесь важно для обеспечения работоспособности:

  • у вас есть только одна строка?
  • или у вас может быть несколько разных значений, один день или другой?


(компилятор должен оптимизировать это для вас, я полагаю)

3 голосов
/ 18 июля 2011

Я сомневаюсь, что в этом есть много, но в листинге 1 я бы сказал, потому что все эти отдельные строки в листинге 2 должны создаваться по очереди, если оптимизатор не делает что-то за кадром.с первой версией, но вместо этого используйте const, если значение не должно меняться.

const string HEADER  = "Header 1";
3 голосов
/ 18 июля 2011

Строки интернированы в мире .NET, поэтому любая из них будет работать одинаково.

Другими словами - это не имеет значения в отношении производительности.

Что касается удобства обслуживания - если вам нужно изменить имя заголовка, лучше выбрать вариант 1 (СУХОЙ).

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

Если вы действительно считаете, что этот фрагмент кода является узким местом в производительности, вам следует попробовать его в обоих направлениях, профиль, и тогда вы будете знать , что более эффективно.

Если вам недостаточно внимания для измерения, не оптимизируйте .

Если вы просто из любопытства спрашиваете, Строки попадают в .NET , так что это точноТо же самое с точки зрения производительности - то есть не делайте второй вариант, потому что тогда тот, кто должен его поддерживать, убьет вас.

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

Первый вариант более эффективен для целей рефакторинга, вам нужно изменить только одну строку, если вы когда-нибудь захотите изменить код. Кроме того, если это всегда будет одно и то же значение, определенное во время компиляции, вы можете рассмотреть возможность использования константы.

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

Я не уверен на 100%, но я думаю, что это примерно то же самое, что вы могли бы добавить const в вашу строковую декларацию, если вы хотите большей производительности, но я не думаю, что вы сможете увидеть какую-либо ощутимую разницу.

Но в листинге 1 есть одно преимущество: вы можете изменить значение, просто изменив одну часть кода ...

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

Оба одинаковы.Строки интернированы.

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

Строки будут использоваться повторно ( interned ).Так что они оба должны быть одинаково эффективны.Я бы сказал, что листинг 1 более удобен в обслуживании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...