首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >既然.net具有自动垃圾收集器,为什么需要这个Dispose()方法呢

既然.net具有自动垃圾收集器,为什么需要这个Dispose()方法呢
EN

Stack Overflow用户
提问于 2011-03-03 20:52:57
回答 4查看 1.2K关注 0票数 1

在我的上一篇文章中,当我批量生成pdf(超过1000页)时,我发布了一个错误“加载报告失败”。然后我给了obj.Dispose(),它解决了我的问题。那么,谁能告诉我Dispose()和垃圾收集器在.net中的实际功能是什么?

谢谢你,萨吉

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-03 21:01:16

.NET垃圾回收器管理托管对象(本机.NET对象)的内存,但它不管理,也不能直接清理非托管资源。托管资源是那些由垃圾回收器隐式清理的资源。您不必编写代码来显式释放此类资源。相反,您必须清理非托管资源(文件句柄、数据库集合等)。在你的代码中显式的。

票数 1
EN

Stack Overflow用户

发布于 2011-03-03 21:01:46

垃圾回收器仅适用于托管对象。Dispose在类分配了非托管内存时使用,因为在该类不使用时需要手动释放它。如果你没有实现dispose模式(看起来你已经实现了),那么内存就永远不会被释放,你就会有非托管内存的内存泄漏。如果您这样做了,但没有调用它,您就依赖于正在运行(并调用Dispose)的垃圾收集器来释放非托管内存,这可能会在您需要的时间范围内发生,也可能不会发生。(几乎)最好总是将实现IDisposable的类的对象包装在using语句中,以保证在对象超出范围时调用Dispose方法。

代码语言:javascript
复制
using (var obj = new DisposableObject())
{
    ...
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-03 21:01:09

请看这个问题:How to dispose a class in .net?

IDisposable与释放内存无关。IDisposable是一种用于释放非托管资源的模式...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5180939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档