【问题标题】:Which one is performance wise to clear a string builder?哪一个是清除字符串生成器的明智之举?
【发布时间】:2012-02-16 22:54:24
【问题描述】:

问:

哪一个是性能方面的:清除字符串生成器

AStringBuilder.Remove(0,AStringBuilder.Length);

string theString = AStringBuilder.ToString();
ABuilder.Replace(theString,String.Empty);

AStringBuilder.Length = 0;

注意:我使用不包含Clear() 方法的Framework 3.5。

【问题讨论】:

  • 为什么不衡量它来得出一个结论性的答案?
  • 为什么不使用 AStringBuilder.Clear() ?
  • 使用Clear()有什么问题

标签: c# string performance .net-3.5 stringbuilder


【解决方案1】:

更新原来你使用的是.net 3.5,Clear是在.net 4中添加的,所以你应该使用Length = 0。实际上,我可能会添加一个名为 Clear 的扩展方法来执行此操作,因为在我看来,它比 Length = 0 更具可读性。


我不会使用这些,而是​​调用Clear

Clear 是一种方便的方法,相当于将当前实例的 Length 属性设置为 0(零)。

我无法想象它比您的任何变体都慢,我也无法想象清除 StringBuilder 实例可能会成为瓶颈。如果任何地方都存在瓶颈,它将在附加代码中。

如果清除对象的性能确实是一个瓶颈,那么您将需要对代码进行计时以了解哪个变体更快。在考虑性能时,没有什么可以真正替代基准测试。

【讨论】:

  • @just_name 使用Length = 0。这就是Clear 所做的一切。
  • 设置 Length=0 以清空 StringBuilder 但保留其内存是正确的。但是当使用 StringBuilder.Insert() 时,这将不起作用。 Insert() 将向 Stringbuilder 添加更多内存,即使 StringBuilder 中已经有大量可用内存。如果 StringBuilder 被反复插入和清除(即 Length=0),最终会得到 Out Of Memory 异常。见我的帖子:stackoverflow.com/questions/29574469/…
【解决方案2】:

.NET 4 之前: 正如大卫赫弗南所说,使用Length = 0;

在 .NET 4 中: 其他选项:StringBuilder.Clear();

http://msdn.microsoft.com/en-us/library/system.text.stringbuilder.clear.aspx

【讨论】:

    【解决方案3】:

    由于您无法使用Clear(),我认为将长度设置为零会更快。这里是some benchmarks

    还有一个link from SO on StringBuilder performance

    【讨论】:

    • 这就是Clear() 所做的:this.Length = 0;
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 2011-10-15
    • 2017-05-24
    • 1970-01-01
    相关资源
    最近更新 更多