大部分的.NET開發者都知道,要做大量的字串相加,StringBuilder比string相加快上N倍。這個效能差異源於String物件的特性,每次"動態相加"時必須捨棄原字串佔用的記憶體空間,重新配置記憶體儲存相加後的新字串內容。只是背後的原理實在曲折,於是我們腦海只會留下"串接字串千萬要用StringBuilder,用string相加會被人笑"的簡化結論。

前些時候協助做Code Review,看到一段SQL查詢程式出現有趣的寫法。

一般為了方便閱讀,將長長的SQL依SELECT, FROM, WHERE拆成多行是很好的寫作習慣;不過在這個例子中,StringBuilder被拿來串接靜態變數,直覺上並不能發揮提高效能的效果。依我的認知,靜態字串的相加會在編譯階段時轉化成單一字串,理論上會比動用StringBuilder物件來得快。但沒測過,我也不敢確定答案與速度差距。所以我準備了三種字串組合方式,在力求SQL指令要拆行以利閱讀的前題下,第一種用StringBuilder,第二種用加號相加,第三種則用@"..."讓字串內容得以直接換行。

 

http://blog.darkthread.net/post-2007-12-15-stringbuilder-for-static-string-concate.aspx

arrow
arrow
    全站熱搜

    nineaddnine 發表在 痞客邦 留言(0) 人氣()