Vis*_*rma 5 .net c# stringbuilder
我看到这个问题
回答者将长度设置为零并且还担心容量?设置容量真的很重要吗?
如果我们反汇编 .net 4.5 Library ,导航到 System.Text.StringBuilder
/// <summary>
/// Removes all characters from the current
<see cref="T:System.Text.StringBuilder"/> instance.
/// </summary>
///
/// <returns>
/// An object whose <see cref="P:System.Text.StringBuilder.Length"/>
/// is 0 (zero).
/// </returns>
[__DynamicallyInvokable]
public StringBuilder Clear()
{
this.Length = 0;
return this;
}
Run Code Online (Sandbox Code Playgroud)
当我们已经将其长度设置为零时,设置容量真的很重要吗……或者 ms 并不关心这一点?
不,这在日常代码中并不重要。请注意,您链接到的堆栈专门解决了放弃该方法以支持 .net 4 实现的问题。
a 的容量StringBuilder决定了底层缓冲区的初始大小。该缓冲区将根据需要扩展 - 我认为每次需要增长时,它的容量都会加倍。
StringBuilder.Length跟踪缓冲区中有多少是有效(分配的)数据。容量和长度是独立的。
Capacity是一个优化功能。通过将容量归零,您所做的就是确保在向 中添加字符以换取立即回收该缓冲区时必须执行内存分配。StringBuilder这是一个经典的权衡。
您很少需要通过修改容量来使代码复杂化。