2008年5月20日 星期二

C# 善用 StringBuilder 類別

http://richielin-programer.blogspot.com/2008/05/c-stringbuilder.html

通常許多人處理字串串連時,都會用 + 這個運算子來處理
但是這雖然也是可以正常處理字串相加,不過對系統效能上卻造成極大的負擔
這是因為使用 string 這個類別時會配置一段記憶體來儲存字串
而當以 + 運算子處理字串相加時或字串資料變更時
系統必須配置一段新的記憶體來儲存新字串的動作 (如兩字串相加後的新字串)
再反配置舊的記憶體
每次配置記憶體和反配置都會造成 CLR 的工作
當然這些動作都是在幕後處理完成,每次處理的時間非常的短
但是如果大量處理這些字串運算或大塊記憶體時,累加起來的時間就不只是如此了
尤其是在 Web 伺服器上執行的 ASP.Net 應用程式來說更是會造成嚴重的影響

而 StringBuilder 物件則不同,它會保留自己的字串緩衝區
所有的動作都在同一塊記憶體工作,減少記憶體配置的動作
除非緩衝區大小不夠處理時,才會作記憶體重新配置
自然能有效提升效能
就像以下處理相同字串的例子,兩者差距足足 28 秒多

StringBuilder 雖然好用,但是還是得先注意一下它的建構函式特性才行
建構函式時可以指定字串的最大容量,或以 Capacity 屬性來取得或設定
當未指定容量時,則預設的容量值為 16
要注意的是,如果處理字串長度超過指定容量時,類別會自動配置新空間而將容量加倍
例如預設為 16,當遇到容量不足時則加倍成 32
至於它的最大容量是 2,147,483,647,應該是夠用了吧
善用 StringBuilder 類別來處理字串運算,讓你的程式執行更有效率

0 意見: