01 | static void Main( string [] args) |
07 | public static void TestString() |
09 | DateTime startTime = DateTime.Now; |
10 | string str = string .Empty; |
11 | for ( int i = 0; i < 10000; i++) |
15 | DateTime endTime = DateTime.Now; |
16 | TimeSpan timeSpan = endTime - startTime; |
17 | Console.WriteLine( "String耗时:{0}" ,timeSpan); |
22 | public static void TestStringBuilder() |
24 | DateTime startTime = DateTime.Now; |
25 | StringBuilder sb = new StringBuilder(); |
26 | for ( int i = 0; i < 1000000; i++) |
30 | DateTime endTime = DateTime.Now; |
31 | TimeSpan timeSpan = endTime - startTime; |
32 | Console.WriteLine( "StringBuilder耗时:{0}" ,timeSpan); |
显示结果:

原因分析:
(1)string对象是不可变的
string str="a";
str=str+"b";//这句代码让人误以为str会增加长度;实际上str是创建一个新的对象,而第一个对象被丢弃,成为垃圾收集器的对象。
(2)StringBuilder是可变的
而StringBuilder内部有个足够长的字符串数组,当字符串长度没有超过数组长度的时候,所有的操作都是真对字符串数组的;当字符串长度足够长,它又会智能创建一个更长的字符串数组,把原来数据复制到新的数组当中。