C# 中的 StringBuilder 与 Span<string>

StringBuilder vs Span<string> in C#

C#中的StringBuilderSpan<string>有什么区别?

StringBuilder 中使用的代码与 Span<string> 中使用的代码相同吗?

如果是,那么它们之间有什么区别,如果不是,哪个更好?

当您插入字符时,

StringBuilder 会增长到任意大小,而 Span<> 只会指向一个 pre-allocated 固定缓冲区。它永远不会增长。

另外两个问题就是废话

编辑:我要指出的是,有一个内部 ValueStringBuilder 适用于跨度(因此具有固定的最大大小),但在其限制范围内效率更高。

这些是不同的。 每个 stringarray 个字符。在普通 string 的定义中,定义了一个 array,如果您想进行任何其他更改,则定义另一个 array,结果, 另一个内存已分配 ,但 StringBuilder 出现并创建最终数组。这个解释很简洁,没有细节,which is complete here

StringBuildersource code中,你也可以看到它使用了相同的通用类型,并且没有在结构上工作。

Span 是一个完全不同的类型 ref struct,这就是为什么它没有在任何地方使用。

当然,Span不仅仅用于string。它可以用于任何其他 不可变类型 FMI