參考鏈接:
https://www.cnblogs.com/lql6/p/7699042.html
StringBuilder內部維護一個char[],默認大小是16個字符,當超過時就會重新分配一次內存(容量大小翻倍),創建一個新的char[],舊的數據就會被垃圾回收
就字符串的拼接來說,頻繁拼接會產生很多string對象,產生很多內存垃圾,容易觸發gc;而StringBuilder,只會在擴充容量時產生內存分配,觸發gc,因此設置好容量大小就很重要了,盡量減少容量擴充。因此StringBuilder在性能方面比string要好
測試:
1.使用string拼接,每幀產生大量內存垃圾
2.使用StringBuilder,內存垃圾明顯減少(擴充容量導致gc),並且第一幀后就不會產生gc了(StringBuilder.ToString也會產生gc,因為產生了新的string對象)
3.指定最大字符數后不再觸發gc