当
StringBuilder
扩大以容纳更大的字符串时,增加的大小可以与Capacity
分开控制吗?
下面的代码演示了这个问题。
StringBuilder
使用初始的 Capacity
作为增量,因此只需一个额外字符,大小就会加倍。
但是如果我需要较大的初始容量,并且尺寸增加较小怎么办?例如,
StringBuilder(16384)
的大小会增加一倍,达到 32768。但我只需要小幅增加,例如 16 或 32。
增量大小可以更改吗?而不是使用
Capacity()
?
我在Append()文档中找到了下面的评论。也许我描述的就是这个指的是什么?
在 .NET Core 和 .NET Framework 4.0 及更高版本中,当 您可以通过调用来实例化 StringBuilder 对象 StringBuilder(Int32, Int32) 构造函数,长度和 StringBuilder 实例的容量可以增长到超出以下值 它的 MaxCapacity 属性。特别是当您致电时,可能会发生这种情况 用于追加的 Append(String) 和 AppendFormat(String, Object) 方法 小绳子。
Imports System.Text
Module Module1
Public Sub main()
Dim sb As StringBuilder = New StringBuilder(64)
Dim str As String
str = StrDup(64, "x")
sb.Append(str) '64 charcters.
Console.WriteLine("Results:")
Console.WriteLine("{0,-68} Capacity={1}", sb.ToString, sb.Capacity.ToString)
sb.Append("y") 'One more.
Console.WriteLine("{0,-68} Capacity={1}", sb.ToString, sb.Capacity.ToString)
Console.WriteLine("Press any key to close.")
Console.ReadKey()
End Sub
End Module
Results:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Capacity=64
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy Capacity=128
Press any key to close.
Capacity
直接更改StringBuilder
支持字段的大小,它不使用当前Length
作为其中的一部分。
所以你可以手动设置它
Dim sb As StringBuilder = New StringBuilder(64)
sb.Append("x"c, 64) '64 charcters.
Console.WriteLine("Results:")
Console.WriteLine("{0,-68} Capacity={1}", sb.ToString, sb.Capacity.ToString)
sb.Capacity += 1
sb.Append("y") 'One more.
Console.WriteLine("{0,-68} Capacity={1}", sb.ToString, sb.Capacity.ToString)