一直以來,我對StringBuilder懷有很深的歉意。

明明StringBuilder在設計上,就是針對String在字串處理上的無效率做了諸多改良,偏偏在本站幾次登場: 要不就是在靜態字串相接上輸到灰頭土臉;再不就是在Replace比試中陰溝裡翻船。被不熟.NET的人瞧見了,還誤以為StringBuilder是隻紙老虎哩...

在此鄭重聲明,StringBuilder真的是鐵打硬漢,只是剛好前述的兩個案例比的是繡花跟炒菜,所以才....

StringBuilder串接字串的迷思一文中,我提到了要為StringBuilder寫一篇平反文。後來我也真的在RUN!PC發表了一篇文章,用一個案例實證StringBuilder.Append相較於String的字串相接,速度快了近一萬四千倍,記憶體卻只耗用1/3,夠強悍吧?

前幾天跟網友討論到相關議題,發現不少人對這個議題頗有興趣,於是特地將這篇文章整理PO出來以饗同好,給大家參考。

** 文章下載 **

【題外話】兩張夕照,大家喜歡哪一張?


Comments

# by Will 保哥

我喜歡第一張

# by 小賤健

雲少+1

# by drem

喜歡第一張,喜歡黃昏的天空。 第二張地面的雜景多了點,但雲讓天空沒那麼單調…看能不能把天空搬到第一張XD

# by drem

喜歡第一張,喜歡黃昏的天空。 第二張地面的雜景多了點,但雲讓天空沒那麼單調…看能不能把天空搬到第一張XD

# by 小熊子

第一張比較好,夕陽的漸層較多,想必是太陽剛下山,肯定比第二張早拍,會比較美一些。要再毒舌一點嗎? 呵~~

# by R.

我顧人怨的選第二張. 因為第一張我的低見覺得沒有重點, 天空的晚霞不夠精采到可以挑大梁, 地面想要撐起半邊天, 所佔的的比例又太少, 感覺遙遠較無人間味. 第二張顏色不討喜的雲雖然有些礙眼, 但也不失晚霞的凝重感, 而地面燈火輝煌, 華燈初上的光線、色澤, 都跟天空平衡的很好, 燈光美、氣氛佳, 簡直可以聽到家家戶戶吃飯的碗筷聲啦!

# by Tom

the second one.

# by hunterpo

我個人喜歡第二張,理由是覺得配重比例比第一張好,並且第二章的雲有一種步步進逼、襲人而來的感覺,彷彿ID4裡面的太空船準備工及各大城市了,這感覺很強大!

# by 赤道企鵝

我比較喜歡第二張 個人覺得 第一張天空的比例2/3 也就是強調天空 但黃昏應該是地平線和天空的連接是最棒的 所以第二張比較接近1/2的比例 第一張的手法我應該是拿來拍日出或是多雲層次的時候吧!!!

# by SlimeMeteor

我喜歡第二張,構圖比例等都比較優。 可惜有幾處小地方美中不足。

# by Johnny

... 結果沒有人在討論 StringBuilder

# by scott

那如果把StringBuilder拿來當成簡單的output buffer用。 不知道這的效能是否效能與憶體是否依然能維持? (就是不斷的Append..到某定量的時候再呼叫.Clear() 重覆的行此此動作 )

# by scott

ps. (我是攝影的門外漢.) 我偏好第一張..我反而稍覺是第二張內容雜亂了些. 沒有一種"很平衡"的感覺.

# by Jeffrey

to scott, 連續性的累積字串內容,看起來很符合StringBuilder的強項,如果可以預期最大的字串長度一口氣宣告好,效能應該就已最佳化了。

# by nowhereman

我以為是要挑出兩張照片中哪些地方不同的遊戲呢 :p

# by 希格

第一張好,差不多1:3 在稍微低一點點或許更好? 事先決定StringBuilder長度以達到最佳效能 但是決定太大又像是在浪費空間

# by Litfal

如果字串處理是影響效能的部分,大多用StringBuilder可以提升效能。 但也不需要所有String都改用StringBuilder。 String也是有效能比較好的時候:當串接中常數字串多的時候。 大家可以試試這樣測試 s為string, sb為StringBuilder, u[49]是string s = "01234" + u[49] + "56789"; 與 sb = new StringBuilder(); sb.Append("01234"); sb.Append(u[49]); sb.Append("56789"); 分別跑個一千萬次 但這種狀況不會很多,出現大概也不會是效能的重點就是了

# by brianXD

六樓的文筆真好...(筆記)

# by 小狐

感謝黑大的無私分享,受用匪淺

Post a comment