当 StringBuilder 扩大以容纳更大的字符串时,可以与容量分开控制大小的增加吗?

问题描述 投票:0回答:1

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.
.net vb.net .net-4.7.2
1个回答
0
投票

根据sourcecode,手动设置

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)

点网小提琴

© www.soinside.com 2019 - 2024. All rights reserved.