当我们将 Stringbuilder 的长度设置为零时,它的容量属性真的很重要吗?

Vis*_*rma 5 .net c# stringbuilder

我看到这个问题

清除nets-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 并不关心这一点?

Gus*_*dor 2

不,这在日常代码中并不重要。请注意,您链接到的堆栈专门解决了放弃该方法以支持 .net 4 实现的问题。

a 的容量StringBuilder决定了底层缓冲区的初始大小。该缓冲区将根据需要扩展 - 我认为每次需要增长时,它的容量都会加倍。

StringBuilder.Length跟踪缓冲区中有多少是有效(分配的)数据。容量和长度是独立的。

Capacity是一个优化功能。通过将容量归零,您所做的就是确保在向 中添加字符以换取立即回收该缓冲区时必须执行内存分配。StringBuilder这是一个经典的权衡。

您很少需要通过修改容量来使代码复杂化。