C# String与StringBuilder


String

string本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低.NET编译器的工作效率。

 String s1 = new String(new char[] { 'c', 'h', 'i', 'n', 'a' });

StringBuilder

StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。

 StringBuilder sb = new StringBuilder(5); //当指定分配大小之后,性能就会得到提升。如果超过指定大小系统会当前大小倍增,也就10,15,20。建议指定大小

在内存中的分配

字符串一旦创建就不可修改大小,所以对字符串添加或删除操作比较频繁的话。那就不要用String而用StringBuilder。

  String a1 = "abc";  //分配固定的内存大小
            a1+="def";  //销毁原先的数据再来分配,代价比较昂贵
 
  StringBuilder sb = new StringBuilder(20);  //指定分配大小
  sb.Append('abc');  //分配到堆区
  sb.Append('def');  //不会被销毁,而是直接追加到后面。

String对象是不可改变的。每次使用System.String类中的方法之一或者是进行运算时(如赋值、拼接等),都要在内存中创建一个新的字符串对象,这就需要为该新对象分配内存空间,而StringBuilder则不会。在需要对字符串执行重复修改操作时,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

文章转载自:快速开发平台
地址:https://www.hocode.com/

相关