为什么 C# 的 String.Join 不在某一时刻使用 StringBuilder?

Why doesn't C#'s String.Join use StringBuilder at one point?

可以看出 hereString.Join 的重载之一使用原始指针并使用称为 UnSafeCharBuffer 的东西。为什么是这样?是性能优化吗?

Is a performance optimization?

是的。

一般来说,您应该预料到不安全代码要么用于低级非托管语言互操作,要么用于性能优化。本例为后者。

这就提出了问题:

Why not use the same techniques for StringBuilder?

不同的场景可以使用不同的优化技术进行调优; StringBuilders 针对他们的场景进行了优化。

场景在几个方面有所不同。 Join 提前知道将返回多少字节; StringBuilder 没有。 Join 知道生成的字符串 只生成一次 ,但是 StringBuilder 必须支持创建、追加、ToString、追加、ToString, ... 高效的工作流程。等等。