返回 C#常用知识小短篇

string 和 StringBuilder 的区别

以下为完整正文内容。

正文

string 是不可变的,每次修改都是在内存里创建一个全新的字符串对象。 string s = "Hello"; s = s + " World"; // 没有修改原来的"Hello",而是创建了一个新的"Hello World" 原来的 "Hello" 还在内存里,只是没人用了,等垃圾回收器来收。 少量拼接无所谓,循环里大量拼接就会出性能问题。 string result = ""; for (int i = 0; i < 10000; i++) { result += i.ToString(); // 每次循环都创建一个新字符串,创建了10000次 } 10000 次循环,创造了 10000 个中间字符串对象,内存分配和回收压力很大。 StringBuilder 内部维护一个字符缓冲区,拼接时往缓冲区里追加,不创建新对象。 用 StringBuilder 改循环,效率高得多。 var sb = new StringBuilder(); for (int i = 0; i < 10000; i++) { sb.Append(i); // 追加到缓冲区,不创建新字符串 } string result = sb.ToString(); // 最后一次性输出