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