清空一个字符串构建器哪种方法在性能方面更好?

3

问题:

在性能方面,哪种方式更好:清空字符串构建器?

AStringBuilder.Remove(0,AStringBuilder.Length);

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

AStringBuilder.Length = 0;

注意:我使用的是3.5版框架,其中不包含Clear()方法。


为什么不进行测量并得出最终答案呢? - vcsjones
为什么不使用 AStringBuilder.Clear() 呢? - Andrew Cox
使用 Clear() 有什么问题? - V4Vendetta
3个回答

7
更新:原来您使用的是 .net 3.5,而 Clear 是在 .net 4 中添加的。因此,您应该使用 Length = 0。实际上,我可能会添加一个扩展方法命名为 Clear,因为在我看来,这比 Length = 0 更易读。

我不会使用以上任何一种方法,而是调用 Clear

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

我无法想象它比您的任何变体都要慢,也无法想象清除 StringBuilder 实例会成为瓶颈。如果有任何瓶颈,那就是在追加代码中。

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


1
@just_name 使用 Length = 0。这就是 Clear 所做的全部。 - vcsjones
将Length设置为0以清空StringBuilder并保留其内存是正确的。但是,当使用StringBuilder.Insert()时,这种方法不起作用。即使StringBuilder中已经有足够的可用内存,Insert()也会向其添加更多内存。如果重复插入和清除(即Length=0),最终会导致OutOfMemory异常。请参见我的帖子:https://dev59.com/JYnda4cB1Zd3GeqPBJUC - Peter Huber

1

1

由于您无法使用Clear(),我认为将长度设置为零更快。这里是一些基准测试

这里还有一个来自SO关于StringBuilder性能的链接


这就是 Clear() 的作用:this.Length = 0; - Sedat Kapanoglu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接