今天在VS2017中,当我尝试键入InplaceStringBuilder时,Intellisense出现了StringBuilderInplaceStringBuilder对我来说是新手,所以我开始进行挖掘以了解可以学习的知识。

我注意到的第一件事是它是一个结构而不是一个类,并且它的类型信息如下所示:

#region Assembly Microsoft.Extensions.Primitives, Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
// C:\Users\Ron Clabo\Documents\Visual Studio 2017\Projects\wwwGiftOasisResponsive\packages\Microsoft.Extensions.Primitives.1.1.0\lib\netstandard1.0\Microsoft.Extensions.Primitives.dll
#endregion

using System.Diagnostics;

namespace Microsoft.Extensions.Primitives {
    [DebuggerDisplay("Value = {_value}")]
    public struct InplaceStringBuilder {
        public InplaceStringBuilder(int capacity);

        public int Capacity { get; set; }

        public void Append(string s);
        public void Append(char c);
        public override string ToString();
    }
}

因此,它的方法比StringBuilder少得多。然后我四处搜寻以了解有关InplaceStringBuilder的更多信息,但是网络上尚无关于它的信息,因此它看起来很新。

此外,我已经提到了差异,InplaceStringBuilderStringBuilder之间有什么区别;以及开发人员何时应使用新的InplaceStringBuilder而不是旧的StringBuilder

最佳答案

当结果字符串比初始容量长时,普通StringBuilder会增加容量。 InplaceStringBuilder受其容量限制,如果结果字符串较长,则会引发异常。

这是InplaceStringBuilder的一个相当大的局限性,因此它可能仅在极少数情况下适用。另外,如果您事先知道容量,则已经可以定义普通StringBuilder的初始容量。

来源:查看GitHubInplaceStringBuilder的实现并将其与MSDN上的StringBuilder进行比较

关于memory-management - InplaceStringBuilder和StringBuilder有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42960456/

10-14 11:48