首页 / C# / c# – 非托管资源和Dispose()
c# – 非托管资源和Dispose()
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 非托管资源和Dispose(),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1351字,纯文字阅读大概需要2分钟。
内容图文
我正在阅读一些关于Dispose()方法的文章,发现非托管资源应该从Dispose()方法(或finalize()方法)中显式释放,文章说文件句柄和数据库连接对象是非托管资源的示例.任何人都可以解释为什么那些是不受管理的,如果在Dispose()中没有正确处理会发生什么?我不知道文件句柄是什么.它们存在于哪里?
解决方法:
在这种情况下,最简单的想法是这样:
>非托管资源是通过进行Windows API调用获得的任何资源,该API调用返回必须在某个时刻释放的Windows Handle.
>唯一的另一种资源是内存.如果它是由.Net分配的,则会自动管理. (请注意,有一些方法可以使用Windows API分配内存;这可以算作非托管资源.)
例如,FileStream类调用Windows API来打开文件,FileStream在其中保留文件句柄.该文件句柄表示必须在某个时刻释放的非托管资源.
FileStream在幕后使用Windows API函数CreateFile().它是从CreateFile返回的句柄,表示非托管资源.
如果你不释放这些句柄,它们将在程序的持续时间内保持分配状态,但是所有具有非托管资源的.Net类都提供了Finalizer(见下文),以确保它们通常在某些时候被释放.
(但是如果您正在编写自己的文件处理类并且忘记在任何地方释放文件句柄,则文件将保持打开状态,直到您的程序退出.)
通常这种非托管资源将在两个地方释放:
> Dispose()方法.这应该是您处置非托管资源的正常方式.
> Finalizer.这是最后的机制.如果一个类有一个终结器,它将在垃圾收集器清理一个死对象时调用它.如果程序员忘记调用Dispose(),任何具有非托管资源的类都应该有一个终结器来清理.
这有点简化,但我希望能帮助你理解它.
有关完整详细信息,请参阅this MSDN article on the Dispose Pattern.
内容总结
以上是互联网集市为您收集整理的c# – 非托管资源和Dispose()全部内容,希望文章能够帮你解决c# – 非托管资源和Dispose()所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。