设置一StringBuilder对象(Disposing a StringBuilder objec

2019-08-02 13:09发布

怎样才能有效地处理一个StringBuilder对象? 如果一个用户生成一个会议多份报告,我的应用程序最终使用大量的内存。

我读过的一些网站的在线的后续可能会有帮助:

StringBuilder sb = new StringBuilder(1000000);

// loop goes here adding lots of stuff to sb

exampleObject.Text = sb.ToString();

sb.Length = 0;

是否最后一行真的有用吗? 处理这个问题的任何其他方式?

注意:这并没有真正继续使用该应用程序停止我的用户。 我只是想知道是否有避免重复内存使用的方法。

Answer 1:

不,一StringBuilder是一个纯粹的管理资源。 你应该刚刚摆脱对它的所有引用的。 其他的都是由垃圾收集器的照顾:

StringBuilder sb = ...;
// ... do work
sb = null; // or simply let it go out of scope.

在.NET中,没有确定的delete (如C ++,在那里你腾出分配给单个对象的内存。)只有GC可以释放内存。 通过没收对象的所有引用,你让GC可以,如果要解除分配的对象。 您可以通过调用强制垃圾收集System.GC.Collect方法。 但是,不建议用GC操作,除非你真的知道自己在做什么。 GC是聪明的。 这是很少有利于迫使它。



Answer 2:

除非“内存过度使用”是一个问题,我会离开它,因为它是不担心。

.NET是足够聪明,避免做垃圾回收,如果你有足够的可用内存大多数情况下。



Answer 3:

如果您正在生成许多报告,你可以考虑重新使用单一的StringBuilder而不是分配每个报告一个新的。



文章来源: Disposing a StringBuilder object