Re: [心得] StringBuilder清除方式

看板C_Sharp (C#)作者 (C++)時間19年前 (2006/04/03 18:52), 編輯推噓3(302)
留言5則, 3人參與, 最新討論串2/2 (看更多)
: 3.接著,使用StringBuilder來模擬斷行,不要又臭又長, 空白放最後: : StringBuilder sql = new StringBuilder(); : sql.AppendFormat("SELECT UserId, UserName "); : sql.AppendFormat("FROM table1 "); : sql.AppendFormat("WHERE UserId=23 AND Enabled=1"); : sqlCommand.CommandText = sql.ToString(); : 發現了嗎? 使用StringBuilder不僅能有效能,又能在觀看上斷行 : 每一行且又隨時加入變化換值。 : 甚至,你能寫個code snippet產生器,快速產生這類的程式碼 : 都比string更整齊多變化。 : 另外,StringBuilder在.Net 2.0不提供Clear()函式 : 請善用 sb.Length = 0 來達到效果 : 它在大量資料測試時發現,能擁有立即刪除內容的高效能 : 不要用 sb.Remove(0, sb.Length); 也可以用一些wrapper把StringBuilder包起來使用 然後override operator+ 就可以方便的使用 舉個例子 (臨時寫的東西 只是舉例用) class ConviString { private StringBuilder sb=new StringBuilder(); public static ConviString operator+(ConviString cs, string s){ cs.sb.Append(s); return cs; } public static ConviString operator+(ConviString cs, object o){ cs.sb.Append(o); return cs; } public static implicit operator string(ConviString cs){ return cs.ToString(); } public override string ToString(){ return sb.ToString(); } public int Length{ get{return sb.Length;} set{sb.Length=value;} } static public ConviString New{ get{return new ConviString();} } }; String result=ConviString.New+1+2+3+4+5+6+7+8; //new ConviString()+1+2+3+4+5+6+7+8; Console.WriteLine(result); result=""; for(int i=0;i<10000;i++) result+=i; //slow ConviString cs=ConviString.New; for(int i=0;i<10000;i++) cs+=i; //fast cs.Length=0; // 可以像下面那樣寫 cs += "SELECT UserId, UserName " + "FROM table1 " + "WHERE UserId=23 AND Enabled=1"; 可以把所有StringBuilder提供的介面都用一份然後完全使用SB的功能 完全的wrapper 只是多加個 + 方便使用 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.217.14 ※ 編輯: cplusplus 來自: 140.115.217.14 (04/03 19:09)

04/03 20:40, , 1F
PS 不過這個class在邏輯設計上很糟糕 請另外設計XD
04/03 20:40, 1F

04/04 11:15, , 2F
好像懂了一點,學了不少,感謝
04/04 11:15, 2F

04/04 17:24, , 3F
另外wrapper就是比較麻煩點...況且SB可以重複使用不慢
04/04 17:24, 3F

04/05 00:59, , 4F
SB內建通用好溝通 wrapper就不行 除此之外wrapper還不錯
04/05 00:59, 4F

04/05 01:01, , 5F
不過當然要設計得當~ wrapper其實也可以提供很多功能
04/05 01:01, 5F
文章代碼(AID): #14CFvHdd (C_Sharp)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #14CFvHdd (C_Sharp)