Csharp/C#教程:什么是IDisposable?分享


什么是IDisposable?

如果.NET有垃圾收集,那你为什么要显式调用IDisposable

垃圾收集用于记忆。 您需要处理非内存资源 – 文件句柄,套接字,GDI +句柄,数据库连接等。这通常是IDisposable类型的基础,尽管实际句柄在引用链中可能相当长。 例如,您可以Dispose一个XmlWriter来处理它有引用的StreamWriter ,它会释放有引用的FileStream ,它会释放文件句柄本身。

在其他评论上稍微扩展一下:

应该对所有引用了非托管资源的对象调用Dispose()方法。 这样的示例包括文件流,数据库连接等。大多数情况下工作的基本规则是:“如果.NET对象实现了IDisposable,那么在完成对象时应该调用Dispose()。

但是,还要记住一些其他事项:

因为Objects有时会在内存旁边保存资源。 GC释放内存; IDisposable是这样你可以释放任何其他东西。

因为您希望控制何时清理对象所拥有的资源。

请参阅GC的工作原理,但它确实如此,即使这样,添加到对象的终结器也只能在2个GC集合后调用。 有时,您希望立即清理这些对象。

这是在使用IDisposable时。 通过显式调用Dispose()(或使用using块的thr语法糖),您可以访问您的对象以标准方式清理自己(即您可以实现自己的cleanup()调用并明确地调用它)

您希望立即清理的示例资源包括:数据库句柄,文件句柄,网络句柄。

为了使用using关键字,对象必须实现IDisposable。 https://msdn.microsoft.com/en-us/library/yh598w02(VS.71).aspx

IDisposable接口通常用资源来描述,但是大多数这样的描述都没有真正考虑“资源”的真正含义。

有些对象需要要求外部实体代表他们做某事,而不利于其他实体,直到另行通知为止。 例如,包含文件流的对象可能需要请求文件系统(可以是连接的Universe中的任何位置)来授予对文件的独占访问权。 在许多情况下,对象对外部实体的需求将与外部代码对对象的需求联系在一起。 一旦客户端代码完成了与上述文件流对象相关的所有操作,例如,该对象将不再需要对其关联文件进行独占访问(或任何访问)。

一般而言,要求实体做某事直到另行通知的对象X产生了发送此类通知的义务,但只要X的客户可能需要X的服务,就无法提供此类通知。 IDisposable的目的是提供一种统一的方式让对象知道他们的服务将不再需要,以便他们可以通知代表他们的实体(如果有的话)不再需要他们的服务。 调用IDisposable的代码既不需要也不关心对象从外部实体请求的服务(如果有的话),因为IDisposable只是邀请一个对象履行对外部实体的义务(如果有的话)。

根据“资源”来说,一个对象在要求外部实体代表它做某事时(通常,但不一定,授予对某些东西的独占使用)直到另行通知,并在它发布资源时获取资源。告诉外部实体不再需要其服务。 获取资源的代码不会因为它产生义务而获得“事物”; 释放资源不会放弃“事物”,而是履行义务。

上述就是C#学习教程:什么是IDisposable?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/962223.html

(0)
上一篇 2021年11月26日
下一篇 2021年11月26日

精彩推荐