为什么 C# 的 String.Join 不在某一时刻使用 StringBuilder?
Why doesn't C#'s String.Join use StringBuilder at one point?
可以看出 here,String.Join
的重载之一使用原始指针并使用称为 UnSafeCharBuffer
的东西。为什么是这样?是性能优化吗?
Is a performance optimization?
是的。
一般来说,您应该预料到不安全代码要么用于低级非托管语言互操作,要么用于性能优化。本例为后者。
这就提出了问题:
Why not use the same techniques for StringBuilder?
不同的场景可以使用不同的优化技术进行调优; StringBuilders 针对他们的场景进行了优化。
场景在几个方面有所不同。 Join
提前知道将返回多少字节; StringBuilder
没有。 Join
知道生成的字符串 只生成一次 ,但是 StringBuilder
必须支持创建、追加、ToString
、追加、ToString
, ... 高效的工作流程。等等。
可以看出 here,String.Join
的重载之一使用原始指针并使用称为 UnSafeCharBuffer
的东西。为什么是这样?是性能优化吗?
Is a performance optimization?
是的。
一般来说,您应该预料到不安全代码要么用于低级非托管语言互操作,要么用于性能优化。本例为后者。
这就提出了问题:
Why not use the same techniques for StringBuilder?
不同的场景可以使用不同的优化技术进行调优; StringBuilders 针对他们的场景进行了优化。
场景在几个方面有所不同。 Join
提前知道将返回多少字节; StringBuilder
没有。 Join
知道生成的字符串 只生成一次 ,但是 StringBuilder
必须支持创建、追加、ToString
、追加、ToString
, ... 高效的工作流程。等等。