Мой комментарий выше означает, что вы должны проверить свои выступления в вашей среде. Используйте экземпляр секундомера, создайте цикл, который выполняется над строкой .Format и StringBuilder.AppendFormat, по крайней мере, в сто тысяч раз, а затем измерьте значение в секундомере.ElapsedMilliseconds. Это примерно даст вам представление о различиях.
В моей среде два подхода довольно идентичны. Разница на 100000 петле 2/3 миллисекунды преимущество для StringBuilder, но боевой дух:
НЕ ДЕЛАТЬ MICROOPTIMIZATIONS
(если у вас нет абсолютно ясно, что результат стоит усилий).
Пример:
string s1 = "Argument 1";
string s2 = "Argument 2";
string s3 = "Argument 3";
string s4 = "Argument 4";
string s5 = "Argument 5";
string s6 = "Argument 6";
string s7 = "Argument 7";
string s8 = "Argument 8";
string s9 = "Argument 9";
string result = string.Empty;
object[] data = new object[] { s1, s2, s3, s4, s5, s6, s7, s8, s9 };
Stopwatch sw = new Stopwatch();
sw.Start();
for(int x = 0; x < 100000; x++)
result = string.Format("{0},{1},{2},{3},{4},{5},{6},{7},{8}", data);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
StringBuilder sb = new StringBuilder();
sw = new Stopwatch();
sw.Start();
for (int x = 0; x < 100000; x++)
{
sb.Length = 0;
sb.AppendFormat("{0},{1},{2},{3},{4},{5},{6},{7},{8}", data);
result = sb.ToString();
}
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Почему вы не пытаетесь разыграть лошадей (https://ericlippert.com/2012/12/17/performance-rant/)? – Steve
Вы хотите попробовать что-то вроде этого: 'string st =" "; для (int i = 0; i <9000; i ++) { st + = "dop"; } 'Это чертовски быстро! хотя это катастрофический цикл, почему? потому что он создал 9000 объектов. как узнать, распространяется ли 'StringBuilder.Format' объекты путем тестирования ?! –
Просто взгляните на [источник ссылки] (https://referencesource.microsoft.com/#mscorlib/system/string.cs,691a34e179b91fdb), когда у вас есть такой вопрос. StringBuilderCache должен убедить вас, что код рамки не сосать и не нуждается в вашей помощи. –