Хорошо ли это / плохо с точки зрения производительности с точки зрения производительности? - PullRequest
1 голос
/ 30 марта 2010

Мой статический метод возвращает следующую объединенную строку, такую ​​как

return (Sb.ToString() + " " + ds.Tables[1].Rows[0].ItemArray[0].ToString() + " " + ds.Tables[2].Rows[0].ItemArray[0].ToString());

Это хорошая / плохая практика или я должен использовать для этого stringbuilder ....

Ответы [ 3 ]

9 голосов
/ 30 марта 2010

Объединение строк в одном кадре будет быстрее, чем использование StringBuilder - хотя, если Sb уже является StringBuilder, то может иметь смысл добавить к нему вместо этого (при условии, что это локальная переменная). Если предположить, что на самом деле это данные, поступившие из базы данных, то время, необходимое для их извлечения, в любом случае значительно превысит конкатенацию строк.

Обратите внимание, что вам не нужны все эти вызовы на ToString() - это будет так же хорошо:

return (Sb + " " + ds.Tables[1].Rows[0].ItemArray[0] + " " + 
        ds.Tables[2].Rows[0].ItemArray[0]);

Вот эквивалент с использованием существующего компоновщика:

return Sb.Append(" ")
         .Append(ds.Tables[1].Rows[0].ItemArray[0])
         .Append(" ")
         .Append(ds.Tables[2].Rows[0].ItemArray[0])
         .ToString();

Это может быть немного быстрее - это будет зависеть от разных вещей. Лично я, вероятно, в любом случае использовал бы версию конкатенации, так как она немного проще IMO. Я очень сомневаюсь, что вы увидите большую разницу в производительности. Обратите внимание, что это немного особый случай, так как у вас уже есть StringBuilder; в общем случае конкатенации набора элементов, где все они могут быть указаны в одном выражении времени компиляции, конкатенация может быть быстрее, поскольку один вызов метода может предоставить всю необходимую информацию.

У меня есть страница на StringBuilder против конкатенации строк , если вам нужны дополнительные сведения и рекомендации.

4 голосов
/ 30 марта 2010

Я думаю, что это более читабельно:

return String.Format("{0} {1} {2}", 
                     Sb, 
                     ds.Tables[1].Rows[0].ItemArray[0],
                     ds.Tables[2].Rows[0].ItemArray[0]);

Об объединении строк или использовании StringBuilder:

Эффективное объединение строк
StringBuilder и конкатенация строк

2 голосов
/ 30 марта 2010

Если вы вызываете это в узком цикле, вам, вероятно, будет лучше использовать StringBuilder (но, тем не менее, этот фрагмент следует профилировать). В противном случае конкатенация в порядке. Однако я бы изменил его на String.Format() для удобства обслуживания / читабельности.

...