使用带有许多args的string.Format时,性能更高:string还是StringBuilder?

时间:2016-11-05 11:52:13

标签: c# string stringbuilder

使用$('.country').change(function(){ ............. ............ }); 是这样的:

string.Format

与说string.Format(txt, arg0, arg1, arg2, arg3, arg4,...) 相同,因此每次从args列表中追加一个新字符串时它会创建新对象吗?并且更好地使用txt+=args;

3 个答案:

答案 0 :(得分:1)

我上面的评论意味着您应该在您的环境中测试您的表现。使用Stopwatch实例,创建一个在string.Format和StringBuilder.AppendFormat上运行至少十万次的循环,然后测量Stopwatch.ElapsedMilliseconds中的值。这将大致让您了解差异。

在我的环境中,这两种方法完全相同。对于StringBuilder而言,100000循环的差异是2/3毫秒的优势,但士气是:

不要进行微观化

(除非你绝对清楚结果值得努力)。

样品:

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);

答案 1 :(得分:0)

如果您只使用字符串格式,请使用string.Format。 如果使用字符串和/或字符串形式的大量连接,请使用StringBuilder。

检查一下: https://support.microsoft.com/en-us/kb/306822

答案 2 :(得分:0)

String.Format在其实现中使用StringBuilder,所以你不能说哪一个更好。