应优先用+拼接固定字符串;循环追加或超5次拼接时选StringBuilder并预设容量;简单格式化用$"",避免复杂逻辑嵌入;Concat无分隔符,Join需指定分隔符且更安全。

直接拼接字符串用 + 最快,但涉及变量、循环或格式化时,string.Concat、string.Join 或 StringBuilder 才真正可控;硬写 string.Format 或插值字符串($"")在简单场景够用,但别在高频循环里无脑用。
哪些场景该用 StringBuilder?
当你要在循环中反复追加内容(比如拼 SQL、生成 HTML 片段、日志行累积),或者单次拼接超过 5 次字符串操作,StringBuilder 就值得上。它避免了每次 + 都新建字符串对象带来的 GC 压力。
- 初始化时尽量指定容量:
new StringBuilder(1024),减少内部数组扩容次数 - 不要把它当成“万能替代”——拼 2–3 个固定字符串,
+或string.Concat更轻量 -
ToString()只在最终需要结果时调用一次,别在循环里反复调
$"" 插值和 string.Format 的实际差异
两者生成的 IL 几乎一致,但插值语法更直观、支持表达式嵌入(如 $"id={user.Id + 1}"),而 string.Format 在 .NET 6+ 已被标记为“不推荐用于新代码”。
- 插值字符串在编译期会转成
string.Format或常量折叠,简单字面量(如$"Hello {name}")不会分配额外委托 - 如果插值中含复杂逻辑(如方法调用、条件判断),建议先算出变量再插值,避免隐藏性能开销
- 注意文化敏感性:数字/日期格式默认走当前线程文化,需统一格式时显式传
CultureInfo.InvariantCulture
常见错误:以为 String.Concat 和 String.Join 可以互换
String.Concat 是纯拼接,不加任何分隔符;String.Join 必须指定分隔符,且对 null 元素更宽容(自动跳过)。
- 拼数组元素且不需要分隔符?用
string.Concat(arr),比string.Join("", arr)少一次空字符串参数解析 - 拼集合并加逗号?必须用
string.Join(", ", list),别用Concat然后自己补逗号逻辑 -
Join支持任意IEnumerable<string></string>,包括 LINQ 查询结果;Concat对非字符串类型会调用.ToString(),容易埋NullReferenceException
真正难的不是选哪个 API,而是判断“这次拼接是否会被执行成百上千次”——很多性能问题源于把调试阶段的简单拼接逻辑,直接复制进了高吞吐的请求处理路径里。


















