为什么StringBuilder的默认容量是16个字符?

Dar*_*kas 3 .net c# stringbuilder capacity

为什么StringBuilder的默认容量是16个字符?这是某种优化吗?

StringBuilder builder = new StringBuilder();
Console.WriteLine("builder capacity: '{0}'", builder.Capacity);
Run Code Online (Sandbox Code Playgroud)

输出:

builder capacity: '16'
Run Code Online (Sandbox Code Playgroud)

Ada*_*rth 5

如果初始化 StringBuilder 实例时未指定容量或最大容量,则使用特定于实现的默认值。

直接来自 MSDN 文档。

他们无法真正优化任何东西,因为它完全取决于使用情况,因此他们让您在构造函数中指定容量,这样您就可以自己优化它。如果您没有指定任何内容,他们会纯粹出于相当安全的猜测而添加一些内容,即使您没有指定任何内容,您也需要一些容量。

列表也是如此。他们不知道您想要多少个项目,也不知道您的应用程序中列表平均包含多少个项目。它们公开了容量,因此您可以强制列表大小达到一定程度,以防止其过于频繁地增长。StringBuilder在这种情况下没有什么不同。