參考文章:http://www.liangshunet.com/ca/201303/218815742.htm
字符串之間的連接常用的兩種是:“+”連接、string.format格式化連接、StringBuilder 連接
1.什麼時候使用“+”連接呢?
待連接的字符串在6個以下,可以使用 + 連接
使用 + 連接最終會調用 String.Concat 方法,當同時連接幾個字符串時,並不是每連接一個都分配一次內存,而是把幾個字符都作為 String.Concat 方法的參數,只分配一次內存,如:
string s = s1 + s2 + s3 + s4 + s5;
最終會被編譯為:string.Concat(s1, s2, s3, s4, s5);
經測試,當待連接的字符串在6個以下時,使用 + 連接,效率略高於 StringBuilder
如果待連接字符串在6個以上,使用 StringBuilder 比較合適。
StringBuilder 只分配一次內存,如果第二次連接內存不足,則修改內存大小;它每次默認分配16字節,如果內存不足,則擴展到32字節,如果仍然不足,繼續成倍擴展。
使用 StringBuilder 的關鍵是分配好內存,如果頻繁的擴展內存,效率大打折扣,因為分配內存,時間開銷相對比較大。
如果事先能准確估計程序執行過程中所需要的內存,從而一次分配足內存,效率大大提高。如果不能准確估計,也要盡量減少內存的分配次數。
string.format 方法,其實最終是調用 StringBuilder,原型如下:
public static string Format(IFormatProvider provider, string format, params object[] args) { if ((format == null) || (args == null)) { throw new ArgumentNullException((format == null) ? "format" : "args"); } StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8)); builder.AppendFormat(provider, format, args); return builder.ToString(); }
如果在待連接字符串比較少的情況下,並沒有什麼效率上的差別,在 StringBuilder 和 string.format 之間可以根據方便性或習慣自由選擇。如果連接的字符串很多, StringBuilder 的效率自然要高,並且使用 string.format 也不太方便。