IDisposable接口的主要用途
可能重复:
正确使用IDisposable接口
“IDisposable接口”文章讲述:
该接口的主要用途是释放非托管资源
为什么? 为什么只有非托管?
整个我的生活,我认为它的PRIMIRALY使用是释放任何资源:托管(连接数据库,服务代理等)和非托管(如果他们在应用程序中使用)。
PS
我相信这个主题已经有问题了,但是找不到它们。
数据库的底层连接不受管理,文件句柄和许多其他低级别的o / s对象也是如此。 他们是非托管的。 实现一个IDisposable
接口意味着你不仅仅依靠垃圾收集器来释放这些资源; 但是您正在使用您可用的低级API来关闭这些资源。
另外,我认为Eric Lippert的回答(第二个回答)对于类似的问题,对于您使用IDisposable
原因很好解释。
如果你进一步阅读,有一个解释:
当垃圾收集器不再使用时,垃圾收集器会自动释放分配给管理对象的内存。 但是,无法预测垃圾收集何时发生。 此外,垃圾收集器不知道非托管资源,如窗口句柄或打开的文件和流。
垃圾收集器需要关心被管理的资源。 这就是他们被managed
。
另外,您示例中的连接资源不是托管资源。 .NET连接类包装非托管资源。
IDisposable.Dispose()
负责两件事情:
Dispose()
处理对象拥有的其他IDisposable