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/