处理StringBuilder对象

时间:2009-08-25 21:08:03

标签: c# winforms memory-management memory-leaks string

如何有效地处置StringBuilder对象?如果用户一次性生成多个报告,我的应用最终会占用大量内存。

我在网上的一些网站上看到以下内容可能有所帮助:

StringBuilder sb = new StringBuilder(1000000);

// loop goes here adding lots of stuff to sb

exampleObject.Text = sb.ToString();

sb.Length = 0;

最后一行真的有用吗?还有其他任何处理方法吗?

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

3 个答案:

答案 0 :(得分:40)

不,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很聪明。强迫它很少有益。

答案 1 :(得分:2)

除非“过度使用内存”是一个问题,否则我会保留原样而不用担心。

在大多数情况下,.NET足够智能,以避免在有足够内存可用的情况下进行垃圾回收。

答案 2 :(得分:2)

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