很多地方都講,在做字符串拼接的時候StringBuilder比string快,並且快得多。
事實是,StringBuilder比string快的原因是string拼接時產生了中間對象,最終是垃圾。
如:
string str = "a";
str += "b";
str += "c";
那麼,最終結果是"abc",但第二行產生了"ab"只是一個中間對象,是個垃圾。用StringBuilder會避免這種中間對象的產生。
那如果我這麼寫呢?
string str = "a"
+ "b"
+ "c";
這會比StringBuilder慢嗎?絕對不會!
且不說這種常量的字符串拼接會在編譯時就進行處理,就算"b"和"c"這裡不是常量是變量,那麼編譯結果也是string.concat(...),不會產生中間對象。
當然,這樣把多個語句變成了一個語句,有個缺點就是調試的時候沒那麼方便。
不是所有時候都可以方便的轉換成連加,比如遇到if、while等語句塊時。
用StringBuilder的目的是為了不產生中間變量,但如果這麼用:
stringbuilder.Append("a"+str1+"b"),就還是產生了中間變量:"a"+str1+"b",應該改成
stringbuilder.Append("a").Append(str1).Append("b"),性能會更好,但可讀性就差點了。
我的結論:可以轉換成一句string連加的StringBuilder操作,用連加更好。但盡量減少+=。