Dot-Net

String.Format 與“string”+“string”還是 StringBuilder?[複製]

  • May 28, 2009

可能的重複:

String.Format 是否與 StringBuilder C# 字元串輸出一樣高效

:格式還是連接?

什麼是性能優先級以及優先選擇以下各項的條件是什麼:

String.Format("{0}, {1}", city, state);

要麼

city + ", " + state;

要麼

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
  • 編譯器將盡可能多地優化字元串concat,例如,為了換行目的而拆分的字元串通常可以優化為單個字元串文字。
  • 與變數的連接將被編譯成String.Concat
  • StringBuilder如果您對字元串進行多次(我猜超過 10 次左右)“修改”,可能會快很多,但它會帶來一些額外的成本,因為它在緩衝區中分配的空間比您需要的更多,並在它調整內部緩衝區的大小時需要。

我個人String.Format幾乎所有時間都在使用,原因有兩個:

  • 維護格式字元串比重新排列一堆變數要容易得多。
  • String.Format接受IFormatProvider傳遞給IFormattable嵌入在字元串中的任何類型(例如數字)的 a,以便您為指定的文化獲得適當的數字格式,並且總體上只是更好地控制值的格式。

例如,由於某些文化使用逗號作為小數點,因此如果您想確保數字的格式符合您的預期,您可能希望使用StringBuilder或者String.Format指定。CultureInfo.InvariantCulture

還有兩點要注意…

  • StringBuilder還有一個AppendFormat功能可以讓您靈活地String.Format不需要不必要的第二個緩衝區。
  • 使用時StringBuilder,請確保不要通過連接傳遞給的參數來破壞目的Append。很容易錯過。

引用自:https://stackoverflow.com/questions/919034