处理StringBuilder对象

Dru*_*uid 21 c# string memory-leaks memory-management winforms

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

我在线阅读了一些网站,以下内容可能有所帮助:

StringBuilder sb = new StringBuilder(1000000);

// loop goes here adding lots of stuff to sb

exampleObject.Text = sb.ToString();

sb.Length = 0;
Run Code Online (Sandbox Code Playgroud)

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

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

Meh*_*ari 41

不,a StringBuilder是纯粹的托管资源.你应该摆脱对它的所有引用.其他一切由垃圾收集器处理:

StringBuilder sb = ...;
// ... do work
sb = null; // or simply let it go out of scope.
Run Code Online (Sandbox Code Playgroud)

在.NET中,没有确定性delete(比如C++,你释放分配给单个对象的内存.)只有GC可以释放内存.通过放弃对对象的所有引用,您可以让GC能够在需要时释放对象.您可以通过调用System.GC.Collect方法强制执行垃圾回收.但是,除非您真的知道自己在做什么,否则不建议使用GC进行操作.GC很聪明.强迫它很少有益.

  • 如果应用程序中的内存使用率过高到导致内存耗尽问题的程度,则添加 GC.Collect() 是完全有效的。当您尝试分配额外的内存并且 o/s 饥饿时,或在其下一个周期中,.Net 垃圾收集将自动清理它。通常你不需要它,除非你的应用非常注重性能。 (3认同)