我知道当sb已经处于容量状态时,当你使用sb.Append(..)时,StringBuilder对象会分配更多的内存.但是这个容量增加了多少?
StringBuilder sb = new StringBuilder(5);
sb.Append("0123456789");
Run Code Online (Sandbox Code Playgroud)
现在,某人的能力是什么?为什么?乘数是多少?
为了清楚起见.我问的是容量而不是长度.
谢谢!
除了一些特殊情况,每次容量增加一倍:
您可以使用.NET Reflector或下载参考源来查看算法.
我无法发布官方.NET实现的源代码,但这里是Mono实现的代码:
// Try double buffer, if that doesn't work, set the length as capacity
if (size > capacity) {
// The first time a string is appended, we just set _cached_str
// and _str to it. This allows us to do some optimizations.
// Below, we take this into account.
if ((object) _cached_str == (object) _str && capacity < constDefaultCapacity)
capacity = constDefaultCapacity;
capacity = capacity << 1; // This means "capacity *= 2;"
if (size > capacity)
capacity = size;
if (capacity >= Int32.MaxValue || capacity < 0)
capacity = Int32.MaxValue;
if (capacity > _maxCapacity && size <= _maxCapacity)
capacity = _maxCapacity;
}
Run Code Online (Sandbox Code Playgroud)
我还建议您不要编写依赖于此特定算法的代码,因为它是一个实现细节,而不是接口保证的东西.
| 归档时间: |
|
| 查看次数: |
1206 次 |
| 最近记录: |