引言
在写C#程序的时候,我们经常会用到字符串类String和StringBuilder类。很多人都知道StringBuilder类的效率要比String类高,但是高多少没有具体的概念。本文通过一个测试程序来为大家呈现String和StringBuilder在效率上的差异。
一、String和StringBuilder的底层区别
在.NET中String是不可变字符串,而StringBuilder是可变字符串。程序中对String对象的连接、插入等操作都是在内存中产生另外一个字符串,然后由.NET的垃圾回收机制把原来的字符串回收。试想如果对一个长1KB的字符串快速进行1万次的插入,内存中就会重复生成1万个String的对象,且只有最后一个有用。我们知道每一个对象的产生和析构都会消耗不少时间,特别的,1KB的字符串经过1万次的插入至少会占用10,000KB的内存资源,这相当的浪费。为了解决String对象在连接、插入等操作上的缺点,.NET引入了StringBuilder类,StringBuilder是可变长度的,其首先在内存中分配固定的长度,当进行频繁的插入和连接操作时,超出了内存中分配的长度会自动进行扩充,从而有效的节约了内存空间和减少了生成对象的时间。
二、效率测试的方法
1.方法
分别为String类型的字符串和StringBuilder类型的字符串