The primary use of IDisposable interface
Possible Duplicate:
Proper use of the IDisposable interface
"IDisposable Interface"文章说明:
The primary use of this interface is to release unmanaged resources
为什么?为什么只有非托管?
在我的一生中,我一直认为它的主要用途是释放任何资源:托管(到DBS的连接、服务代理等)和非托管(如果在应用程序中使用)。
附笔。
我相信这个话题已经有问题了,但找不到。
与文件句柄和许多其他低级O/S对象一样,数据库的底层连接不受管理。他们没有管理。实现
另外,我认为埃里克·利珀特(EricLippert)对类似问题的回答(下一个)是一个很好的解释,解释了为什么你会使用
如果你进一步阅读,有一个解释:
The garbage collector automatically
releases the memory allocated to a
managed object when that object is no
longer used. However, it is not
possible to predict when garbage
collection will occur. Furthermore,
the garbage collector has no knowledge
of unmanaged resources such as window
handles, or open files and streams.
垃圾收集器负责管理资源。这就是为什么它们是
此外,示例中的连接资源不是托管资源。.NET连接类包装非托管资源。
- 释放对象可能拥有的非托管资源
- 对象拥有的其他
IDisposable 的Dispose()
与其说是"未管理的资源",不如说是"责任"。当一个对象被描述为持有"未管理的资源"时,真正的意思是:
类具有清理职责的最常见情况是,要求其他实体保留某些内容(无论是文件、gdi句柄、锁、数组槽、内存块、通信通道或其他内容),直到另行通知。如果没有任何东西告诉另一个实体它保留的东西不再需要,它将永远不会允许任何其他东西使用它。
如果一个具有执行某些操作的重要职责的对象在履行其职责之前被垃圾收集器清除,则该操作将永远不会被执行。有两种方法可以防止这种情况:
提供第二种清理方法的对象称为"托管资源"。
你的答案
为什么?为什么只有非托管?
托管资源的生命周期由垃圾收集器控制。这是一个很好的原因,你使用C或Java。