OK..看到公式就明白了..StringBuilder是以当前的Capacity*2来扩充的..所以,在使用StringBuilder需要特别注意,尤其是要拼接或追加N多字符的时候,要注意技巧的使用,可以适当的,有预见性的设置Capacity的值,避免造成过大内存的浪费,节约无谓的内存空间..例如,下列代码就可以根据情况自动的扩展,而避免了较大的内存浪费.

 1System.Text.StringBuilder sb = new System.Text.StringBuilder();
 2int i = 0;
 3long StartTime  = DateTime.Now.Ticks;
 4while ( i < 100000 ) {
 5sb.Append( i.ToString() );
 6i++;
 7}

 8long EndTime  = DateTime.Now.Ticks;
 9
10Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "\t Capacity:"+ sb.Capacity + "\t Length:" 
11
12+ sb.Length);
13
14System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
15= 0;
16StartTime  = DateTime.Now.Ticks;
17while ( i < 100000 ) 
18{
19if ( sb1.Capacity <= sb1.Length )//先判断是否>Length
20sb1.Capacity += 7;//这里一定要根据情况的增加容量,否则会有性能上的消耗
21sb1.Append( i.ToString() );
22i++;
23}

24EndTime  = DateTime.Now.Ticks;
25
26Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "\t Capacity:"+ sb1.Capacity + "\t 
27
28Length:" + sb1.Length);
需要特别说明的一点是,自动增加的容量,一定要根据实际预见的情况而改变,否则不但起不到优化的作用,反而会影响到程序的性能..


另外,如果有时间的话,可以测试一下下面的代码,用string和StringBuilder拼接字符串的区别..你会吓到的!!

 1System.Text.StringBuilder sb = new System.Text.StringBuilder();
 2int i = 0;
 3long StartTime  = DateTime.Now.Ticks;
 4while ( i < 100000 ) {
 5sb.Append( i.ToString() );
 6i++;
 7}

 8long EndTime  = DateTime.Now.Ticks;
 9
10Console.WriteLine( "时间:" + ( EndTime-StartTime ) );
11
12string sb1 = null;
13= 0;
14StartTime  = DateTime.Now.Ticks;
15while ( i < 100000 ) 
16{
17sb1 += i;
18i++;
19}

20EndTime  = DateTime.Now.Ticks;
21Console.WriteLine( "时间:" + ( EndTime-StartTime ));
http://blog.csdn.net/jelink/archive/2006/11/03/1364695.aspx
posted on 2007-03-10 23:58  mbskys  阅读(347)  评论(0)    收藏  举报