String 和 StringBuilder的区别与性能

stringStringBuilder 都可以用在串联字符串上,但是其性能在不同的场景下会有很大的差别。

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

通过串接多个字串来比对StringBuilderstring的性能

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

【总结】

  1. string 是不可修改的,而 StringBuilder 是可修改的。
  2. 多个字串在一条语句中进行串联时,使用 string;通过多条语句进行串联或在循环中进行串联时,使用StringBuilder
  3. string位于 System 的命名空间下,StringBuilder位于 System.Text命名空间下

参考资料:Use Visual C# to improve string concatenation performance

posted @ 2023-05-25 10:40  Jeffxue  阅读(104)  评论(0编辑  收藏  举报