Вы просто не получаете какую-либо полезную ценность, просто «спрашивая» об этих вещах. Вам нужно ориентироваться. Возьмите этот код, например:
var sw = Stopwatch.StartNew();
var cc0 = GC.CollectionCount(0);
var s = (string)null;
for (var i = 0; i < 10000000; i++)
{
s = "a";
s += "b";
}
var cc1 = GC.CollectionCount(0);
sw.Stop();
Console.WriteLine(
"collections == {0}, ms == {1}, string == \"{2}\"",
cc1 - cc0,
sw.ElapsedMilliseconds,
s);
Против этого кода:
var sw = Stopwatch.StartNew();
var cc0 = GC.CollectionCount(0);
var sb = (StringBuilder)null;
for (var i = 0; i < 10000000; i++)
{
sb = new StringBuilder();
sb.Append("a");
sb.Append("b");
}
var cc1 = GC.CollectionCount(0);
Console.WriteLine(
"collections == {0}, ms == {1}, string == \"{2}\"",
cc1 - cc0,
sw.ElapsedMilliseconds,
sb.ToString());
два результата я получаю являются:
collections == 63, ms == 336, string == "ab" // +=
collections == 228, ms == 692, string == "ab" // StringBuilder
StringBuilder
берет в два раза длиннее и вызывает более 3,5 раза больше сборок мусора.
Это, безусловно, случай, если бы я соединил очень длинные строки, что StringBuilder
будет работать лучше, но я не буду знать эту точку, если не буду ее измерять.
Вам нужно предоставить более подробную информацию о том, какой код вы используете, и что вы подразумеваете под «лучше» (быстрее, меньше памяти, легко читается код и т. Д.), Прежде чем мы сможем сказать, что лучше.
Кто знает, что лучше?Вам нужно определить свои критерии для «лучшего», а затем вам нужно проверить ** свой код с вашими данными **. Только тогда вы узнаете. – Enigmativity
Отъезд: http://stackoverflow.com/questions/6524528/string-replace-vs-stringbuilder-replace – Robban
Для редактирования огромной строки: http://en.wikipedia.org/wiki/Rope_(data_structure). Возможно, вы сможете найти достаточную реализацию. –