01 static void Main(string[] args)
02 {
03 TestString();
04 TestStringBuilder();
05 }
06
07 public static void TestString()
08 {
09 DateTime startTime = DateTime.Now;
10 string str = string.Empty;
11 for (int i = 0; i < 10000; i++)// 一萬次
12 {
13 str += “a”;
14 }
15 DateTime endTime = DateTime.Now;
16 TimeSpan timeSpan = endTime – startTime;
17 Console.WriteLine(“String耗時:{0}”,timeSpan);
18
19
20 }
21
22 public static void TestStringBuilder()
23 {
24 DateTime startTime = DateTime.Now;
25 StringBuilder sb = new StringBuilder();
26 for (int i = 0; i < 1000000; i++)//一百萬次
27 {
28 sb.Append(“a”);
29 }
30 DateTime endTime = DateTime.Now;
31 TimeSpan timeSpan = endTime – startTime;
32 Console.WriteLine(“StringBuilder耗時:{0}”,timeSpan);
33 Console.ReadLine();
34
35 }
顯示結果:
原因分析:
(1)string對象是不可變的
string str=”a”;
str=str+”b”;//這句代碼讓人誤以為str會增加長度;實際上str是創建一個新的對象,而第一個對象被丟棄,成為垃圾收集器的對象。
(2)StringBuilder是可變的
而StringBuilder內部有個足夠長的字符串數組,當字符串長度沒有超過數組長度的時候,所有的操作都是真對字符串數組的;當字符串長度足夠長,它又會智能創建一個更長的字符串數組,把原來數據復制到新的數組當中