在我的上一篇文章中,当我批量生成pdf(超过1000页)时,我发布了一个错误“加载报告失败”。然后我给了obj.Dispose(),它解决了我的问题。那么,谁能告诉我Dispose()和垃圾收集器在.net中的实际功能是什么?
谢谢你,萨吉
发布于 2011-03-03 21:01:16
.NET垃圾回收器管理托管对象(本机.NET对象)的内存,但它不管理,也不能直接清理非托管资源。托管资源是那些由垃圾回收器隐式清理的资源。您不必编写代码来显式释放此类资源。相反,您必须清理非托管资源(文件句柄、数据库集合等)。在你的代码中显式的。
发布于 2011-03-03 21:01:46
垃圾回收器仅适用于托管对象。Dispose在类分配了非托管内存时使用,因为在该类不使用时需要手动释放它。如果你没有实现dispose模式(看起来你已经实现了),那么内存就永远不会被释放,你就会有非托管内存的内存泄漏。如果您这样做了,但没有调用它,您就依赖于正在运行(并调用Dispose)的垃圾收集器来释放非托管内存,这可能会在您需要的时间范围内发生,也可能不会发生。(几乎)最好总是将实现IDisposable的类的对象包装在using语句中,以保证在对象超出范围时调用Dispose方法。
using (var obj = new DisposableObject())
{
...
}发布于 2011-03-03 21:01:09
请看这个问题:How to dispose a class in .net?
IDisposable与释放内存无关。IDisposable是一种用于释放非托管资源的模式...
https://stackoverflow.com/questions/5180939
复制相似问题