OK..看到公式就明白了..StringBuilder是以当前的Capacity*2来扩充的..所以,在使用StringBuilder需要特别注意,尤其是要拼接或追加N多字符的时候,要注意技巧的使用,可以适当的,有预见性的设置Capacity的值,避免造成过大内存的浪费,节约无谓的内存空间..例如,下列代码就可以根据情况自动的扩展,而避免了较大的内存浪费.
1
System.Text.StringBuilder sb = new System.Text.StringBuilder();
2
int i = 0;
3
long StartTime = DateTime.Now.Ticks;
4
while ( i < 100000 ) {
5
sb.Append( i.ToString() );
6
i++;
7
}
8
long EndTime = DateTime.Now.Ticks;
9
10
Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "\t Capacity:"+ sb.Capacity + "\t Length:"
11
12
+ sb.Length);
13
14
System.Text.StringBuilder sb1 = new System.Text.StringBuilder();
15
i = 0;
16
StartTime = DateTime.Now.Ticks;
17
while ( i < 100000 )
18
{
19
if ( sb1.Capacity <= sb1.Length )//先判断是否>Length
20
sb1.Capacity += 7;//这里一定要根据情况的增加容量,否则会有性能上的消耗
21
sb1.Append( i.ToString() );
22
i++;
23
}
24
EndTime = DateTime.Now.Ticks;
25
26
Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "\t Capacity:"+ sb1.Capacity + "\t
27
28
Length:" + sb1.Length);
需要特别说明的一点是,自动增加的容量,一定要根据实际预见的情况而改变,否则不但起不到优化的作用,反而会影响到程序的性能..
System.Text.StringBuilder sb = new System.Text.StringBuilder();2
int i = 0;3
long StartTime = DateTime.Now.Ticks;4
while ( i < 100000 ) {5
sb.Append( i.ToString() );6
i++;7
}8
long EndTime = DateTime.Now.Ticks;9

10
Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "\t Capacity:"+ sb.Capacity + "\t Length:" 11

12
+ sb.Length);13

14
System.Text.StringBuilder sb1 = new System.Text.StringBuilder();15
i = 0;16
StartTime = DateTime.Now.Ticks;17
while ( i < 100000 ) 18
{19
if ( sb1.Capacity <= sb1.Length )//先判断是否>Length20
sb1.Capacity += 7;//这里一定要根据情况的增加容量,否则会有性能上的消耗21
sb1.Append( i.ToString() );22
i++;23
}24
EndTime = DateTime.Now.Ticks;25

26
Console.WriteLine( "时间:" + ( EndTime-StartTime ) + "\t Capacity:"+ sb1.Capacity + "\t 27

28
Length:" + sb1.Length);另外,如果有时间的话,可以测试一下下面的代码,用string和StringBuilder拼接字符串的区别..你会吓到的!!
1
System.Text.StringBuilder sb = new System.Text.StringBuilder();
2
int i = 0;
3
long StartTime = DateTime.Now.Ticks;
4
while ( i < 100000 ) {
5
sb.Append( i.ToString() );
6
i++;
7
}
8
long EndTime = DateTime.Now.Ticks;
9
10
Console.WriteLine( "时间:" + ( EndTime-StartTime ) );
11
12
string sb1 = null;
13
i = 0;
14
StartTime = DateTime.Now.Ticks;
15
while ( i < 100000 )
16
{
17
sb1 += i;
18
i++;
19
}
20
EndTime = DateTime.Now.Ticks;
21
Console.WriteLine( "时间:" + ( EndTime-StartTime ));
http://blog.csdn.net/jelink/archive/2006/11/03/1364695.aspx
System.Text.StringBuilder sb = new System.Text.StringBuilder();2
int i = 0;3
long StartTime = DateTime.Now.Ticks;4
while ( i < 100000 ) {5
sb.Append( i.ToString() );6
i++;7
}8
long EndTime = DateTime.Now.Ticks;9

10
Console.WriteLine( "时间:" + ( EndTime-StartTime ) );11

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


浙公网安备 33010602011771号