[C#] string 和 StringBuilder 的比较

String Vs StringBuilder

string

  • 名字空间为System
  • 实例不可变(只读)
  • 当值连续变化时,会出现性能降级
  • 线程安全

StringBuilder(可变的string)

  • 所在名字空间为System.Text
  • 实例可变
  • 当对存在的实例进行修改时,显示出更好的性能

下面的例子,将创建2001个字符串,而其中的2000个都将被舍弃。

string s = string.Empty;
for (i = 0; i < 1000; i++) {
  s += i.ToString() + " ";
}

而改成使用StringBuilder就能减少频繁的内存分配,从而改善性能:

StringBuilder sb = new StringBuilder();
for (i = 0; i < 1000; i++) {
  sb.Append(i);
  sb.Append(' ');
}

简而言之,string对象不可变,对字符串的操作都将在内存中产生副本,从而影响性能,StringBuilder相反,至于线程安全,不清楚使用场景,应该是字符串变量如果不重新赋值,可以保证内容不会被中途改变。


[1] https://stackoverflow.com/questions/3069416/difference-between-string-and-stringbuilder-in-c-sharp

猜你喜欢

转载自blog.csdn.net/ftell/article/details/81903818