Theme NexT works best with JavaScript enabled

ShunNien's Blog

不積跬步,無以致千里;不積小流,無以成江海。

0%

C# 中 String 直接累加與 StringBuilder

這陣子再重新閱讀設計模式,想到了 StringStringBulder 的對比,裡面應用了 Builder 這個模式;後來想到這兩者的差異也沒紀錄,這次就順手紀錄一下

兩者的主要差異是在動態處理資料時,資源使用程度。

  • String

string 是參考型別,所以每次在動態處理資料時,都會再配置一個新的記憶體給它,但是原本使用的資源雖然最終交由 GC(Garbage Collection) 回收,但是在回收之前資源卻已經浪費掉了。

  • StringBuilder
    使用了 Builder 模式,會維護一個緩衝區,以容納新資料。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void Main()
{
Stopwatch sw = new Stopwatch();
StringBuilder sb = new StringBuilder();
String str = "";
sw.Start();
for (int i = 0; i < 10000; i++)
{
str += i.ToString();
}
sw.Stop();
Console.WriteLine("String Class :" + sw.ElapsedMilliseconds);

sw.Reset();
sw.Start();
for (int i = 0; i < 10000; i++)
{
sb.Append(i.ToString());
}
sw.Stop();
Console.WriteLine("StringBuilder Class:" + sw.ElapsedMilliseconds);
}

動態處理 100000 筆資料的花費時間,輸出結果如下圖
輸出結果

參考資料

歡迎關注我的其它發布渠道