Re: [心得] StringBuilder清除方式
: 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
04/03 20:40, 1F
推
04/04 11:15, , 2F
04/04 11:15, 2F
推
04/04 17:24, , 3F
04/04 17:24, 3F
推
04/05 00:59, , 4F
04/05 00:59, 4F
→
04/05 01:01, , 5F
04/05 01:01, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章