string
和 StringBuilder
都可以用在串联字符串上,但是其性能在不同的场景下会有很大的差别。
1、 使用string +场景: 多个字串通过 +
来进行连接,如下所示,此时都在一条语句里面,因此内部会通过 StringBuilder
对象来完成对应的连接,此时推荐使用 string
+
来连接字串
string s1 ,s2 ,s3 ,s4 ,s5;
string str1 = s1 + s2 + s3 + s4 + s5;
StringBuilder str2 = new StringBuilder();
str2.Append(s1);
str2.Append(s2);
str2.Append(s3);
str2.Append(s4);
str2.Append(s5);
2、 使用StringBuilder 场景:多个字串串联分成多条语句,或循环里连接字串,如下所示。此时使用 StringBuilder
性能更优
string s1, s2, s3, s4, s5;
// 多个字串通过多条语句来进行串联
string str1 = string.Empty;
str1 += s1;
str1 += s2;
str1 += s3;
str1 += s4;
str1 += s5;
StringBuilder str2 = new StringBuilder();
str2.Append(s1);
str2.Append(s2);
str2.Append(s3);
str2.Append(s4);
str2.Append(s5);
// 循环内部进行串联字串
for(int i=0;i<10000;i++)
{
str1 += i;
}
for(int i=0;i<10000;i++)
{
strBuild.Append(i.ToString());
}
通过串接多个字串来比对
StringBuilder
和string
的性能
Stopwatch sw01 = new Stopwatch();
string str1 = String.Empty;
sw01.Start();
for(int i=0;i<100000;i++)
{
str1 += i;
}
sw01.Stop();
Console.WriteLine("String time = " + sw01.ElapsedMilliseconds);
Stopwatch sw02 = new Stopwatch();
StringBuilder strBuild = new StringBuilder();
sw02.Start();
for(int i=0;i<100000;i++)
{
strBuild.Append(i);
}
sw02.Stop();
Console.WriteLine("StringBuilder time = " + sw02.ElapsedMilliseconds);
【总结】
string
是不可修改的,而StringBuilder
是可修改的。- 多个字串在一条语句中进行串联时,使用
string
;通过多条语句进行串联或在循环中进行串联时,使用StringBuilder
string
位于 System 的命名空间下,StringBuilder
位于 System.Text命名空间下
参考资料:Use Visual C# to improve string concatenation performance
标签:String,StringBuilder,性能,字串,str2,str1,Append,string From: https://www.cnblogs.com/Jeffxu/p/17430470.html