gpt4 book ai didi

memory-management - InplaceStringBuilder 和 StringBuilder 有什么区别?

转载 作者:行者123 更新时间:2023-12-04 13:57:15 26 4
gpt4 key购买 nike

今天在VS2017智能感知浮出水面InplaceStringBuilder当我尝试输入 StringBuilder 时. InplaceStringBuilder对我来说是新手,所以我开始挖掘,看看我能学到什么。

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

#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 的更多信息但是网上关于它的内容还很少,所以它看起来很新。

另外,我已经提到的差异, InplaceStringBuilder之间的差异是什么?和 StringBuilder ;开发人员何时应该使用新的 InplaceStringBuilder而不是古老的 StringBuilder ?

最佳答案

由于它只做一次分配,InplaceStringBuilder对于众所周知的、大小合理的字符串更有效。我们可能希望在需要非常高效的方法中使用它。

它是通过 pull request #157 引入的,其中包括以下评论。

Intended to be used instead of pooled StringBuilder or string.Concat when all parts of string are known... Does only 1 allocation of resulting string... should only be used for well-known reasonably sized strings. For everything else, use StringBuilder... do not use across await points...



PR的历史讲述了这个故事:
  • 2016 年 7 月,Issue #676注意到不必要的分配。
  • 2016 年 9 月,Pull request #699解决问题 #676 并建议将“就地字符串格式分解为结构...”
  • 2016 年 9 月,Issue #717使提案正式化。
  • 2016 年 9 月,Pull request #157执行该提议。
  • 关于memory-management - InplaceStringBuilder 和 StringBuilder 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42960456/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com