IDisposable接口的主要用途

Bud*_*dda 6 .net c# idisposable

可能重复:
正确使用IDisposable接口

"IDisposable Interface"文章告诉我们:

此接口的主要用途是释放非托管资源

为什么?为什么只有不受管理?

我的整个生命我认为它的PRIMIRALY用途是释放任何资源:托管(连接到DB,服务代理等)和非托管(如果它们在应用程序中使用).

PS

我相信已经有关于这个主题的问题,但找不到它们.

Dav*_*ter 6

不管理db的底层连接,文件句柄和许多其他低级o/s对象也是如此.他们没有管理.实现IDisposable接口意味着您不仅仅依靠垃圾收集器来释放这些资源; 但是您正在使用可用的低级API来关闭这些资源.

另外,我认为Eric Lippert 对类似问题的回答(第二个问题)是一个很好的解释,为什么你会使用IDisposable.


Ale*_*Aza 5

如果你进一步阅读,有一个解释:

当不再使用该对象时,垃圾收集器会自动释放分配给托管对象的内存.但是,无法预测垃圾收集何时发生.此外,垃圾收集器不了解非托管资源,例如窗口句柄,或打开文件和流.

垃圾收集器负责管理托管资源.这就是他们的原因managed.

此外,示例中的连接资源不是受管资源..NET连接类包装非托管资源.