StringBuilder, различия между двумя синтаксисами - PullRequest
0 голосов
/ 06 июня 2011

Есть ли разница между:

StringBuilder requete = new StringBuilder();
requete.Append(" INSERT into " + listeLibelleTable[index] + " ( ");

и

StringBuilder requete = new StringBuilder();
requete.Append(" INSERT into ");
requete.Append(listeLibelleTable[index]);
requete.Append(" ( ");

Когда я говорю «разница», я имею в виду производительность, если этот код находится в цикле, например.

Я думаю, что эти строки

requete.Append(" INSERT into " + listeLibelleTable[index] + " ( ");

разрешается во время компиляции, поэтому это не должно влиять на производительность, но я не уверен в этом

Ответы [ 4 ]

4 голосов
/ 06 июня 2011

Если listeLibelleTable[index] действительно не может быть разрешено во время компиляции (в чем я очень сомневаюсь), использование конкатенации строк, по-видимому, неэффективно при использовании StringBuilder.

Во втором примере вы объединяете строку и затем добавляете ее вместо добавления к StringBuilder.

В любом случае вам, вероятно, следует использовать AppendFormat для удобства чтения:

requete.AppendFormat(" INSERT into {0} ( ", listeLibelleTable[index]);
1 голос
/ 06 июня 2011

Ваш первый код выполняет конкатенацию, строит полную строку и затем добавляет ее к StringBuilder.Предполагая, что вы также собираетесь добавлять другие вещи, вторая форма может быть немного быстрее ... ей не нужна временная строка с результатом этой части конкатенации.

С другойстороны, если вы выполняете операцию с базой данных, разница будет неизмеримо мала.

0 голосов
/ 06 июня 2011

Конкатенация строк создаст новый объект String, скопирует существующее значение и удалит старую строку. покажи это будет медленно проверьте http://kaioa.com/node/59 для справки

0 голосов
/ 06 июня 2011

Я думаю сделать это:

" INSERT into " + listeLibelleTable[index] + " ( "

вы используете больше памяти для хранения результата операции concat!

...