C# 中的 StringBuilder 与 Span<string>
StringBuilder vs Span<string> in C#
C#中的StringBuilder
和Span<string>
有什么区别?
StringBuilder
中使用的代码与 Span<string>
中使用的代码相同吗?
如果是,那么它们之间有什么区别,如果不是,哪个更好?
当您插入字符时,StringBuilder
会增长到任意大小,而 Span<>
只会指向一个 pre-allocated 固定缓冲区。它永远不会增长。
另外两个问题就是废话
编辑:我要指出的是,有一个内部 ValueStringBuilder
适用于跨度(因此具有固定的最大大小),但在其限制范围内效率更高。
这些是不同的。
每个 string
是 array
个字符。在普通 string
的定义中,定义了一个 array
,如果您想进行任何其他更改,则定义另一个 array
,结果, 另一个内存已分配 ,但 StringBuilder
出现并创建最终数组。这个解释很简洁,没有细节,which is complete here
在StringBuilder
的source code中,你也可以看到它使用了相同的通用类型,并且没有在结构上工作。
Span
是一个完全不同的类型 ref struct
,这就是为什么它没有在任何地方使用。
当然,Span
不仅仅用于string
。它可以用于任何其他 不可变类型 。 FMI
C#中的StringBuilder
和Span<string>
有什么区别?
StringBuilder
中使用的代码与 Span<string>
中使用的代码相同吗?
如果是,那么它们之间有什么区别,如果不是,哪个更好?
StringBuilder
会增长到任意大小,而 Span<>
只会指向一个 pre-allocated 固定缓冲区。它永远不会增长。
另外两个问题就是废话
编辑:我要指出的是,有一个内部 ValueStringBuilder
适用于跨度(因此具有固定的最大大小),但在其限制范围内效率更高。
这些是不同的。
每个 string
是 array
个字符。在普通 string
的定义中,定义了一个 array
,如果您想进行任何其他更改,则定义另一个 array
,结果, 另一个内存已分配 ,但 StringBuilder
出现并创建最终数组。这个解释很简洁,没有细节,which is complete here
在StringBuilder
的source code中,你也可以看到它使用了相同的通用类型,并且没有在结构上工作。
Span
是一个完全不同的类型 ref struct
,这就是为什么它没有在任何地方使用。
当然,Span
不仅仅用于string
。它可以用于任何其他 不可变类型 。 FMI