利用IDisposable接口构建包含非托管资源对象

托管资源与非托管资源

在.net中,对象使用的资源分为两种:托管资源与非托管资源。托管资源由CLR进行管理,不需要开发人员去人工进行控制,.NET中托管资源主要指“对象在堆中的内存”;非托管资源指对象使用到的一些托管内存之外的内资源(例如操作系统的资源),CLR不会管理这些资源,需要开发人员去控制。.NET对象使用到的非托管资源主要有I/O流、数据库连接、Socket连接、窗口句柄等直接与操作系统操作的相关资源。

管理非托管资源

当一个对象不再使用时,我们应该将它使用的非托管资源释放掉,归还给操作系统,不然等到CLR将它在队中的内存回收之后。这部分内存就会变成不可达状态。只能等到整个应用程序运行结束后才能归还给系统。所以我们应当在该对象实例处于“可达”状态时,既有对象引用指向它时释放非托管资源。

利用IDisposable接口构造含有非托管资源类型的对象

在.net类库中有一个IDisposed的接口。几乎每一个使用非托管资源的类型都应该实现这个接口。那么如果我们看到实现此接口的类型,也应该第一时间想到该类型中包含非托管资源。IDispose接口是管理对象非托管资源的一种原则。代码如下:

interface IDisposable
{void Dispose();
}
class ABase:IDisposable
{bool _disposed = false;public bool Disposed{get{return _disposed;}}public ABase(){}public void Dispose(){if(_disposed){Dispose(true);GC.SuppressFinalize(this);_disposed = true;}}protected virtual void Dispose(bool disposing){if(disposing){//release member's unmanaged resource}// release ABase's unmanaged resource}~ABase{Dispose(false);}
}
class A : ABase
{public A(){}protected override void Dispose(bool disposing){if(disposing){// release member's unmanaged resource}// release A's unmanaged resource// release base class's unmanaged resourcebase.Dispose(disposing);}}
class B:A
{public B(){}public void Dosomething(){if(Disposed)// if released, throw exception{throw new ObjectDisposedException(...);}// do something here}protected override void Dispose(bool disposing){if(disposing){// release member's unmanaged resource}// release B's Unmanaged resourcebase.Dispose(disposing);}
}

转载于:https://www.cnblogs.com/MaFeng0213/p/9948746.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改Navicat数据库自动备份目录

1.右键连接,选择“编辑连接” 2. 选择“高级”,设置位置

python图形界面编程库_Python支持哪些图形界面的第三方库

Python支持哪些图形界面的第三方库 发布时间:2020-11-09 10:37:56 来源:亿速云 阅读:58 作者:小新 这篇文章给大家分享的是有关Python支持哪些图形界面的第三方库的内容。小编觉得挺实用的,因此分享给大家做个参考。一…

成为中国特色项目经理,走上人生巅峰

今天是秋分,写在项目经理6周年的总结 落叶知秋,情谊如酒,风渐凉时有喜无忧; 岁月流走,蓦然回首,一声问候醇绵依旧; 有情相守,不离左右,含笑送出这份问候。 -----------…

python中括号的作用_Python3--中括号[]与冒号:在列表中的作用

先来定义两个列表: liststr ["helloworld","hahahh","123456"] listnum [1,2,3,4,5,6] 这两个列表都可以看懂吧,一个字符串组成的列表,一个数字组成的列表 中括号"[]"的作用 : 用于定义列表或引用列表、数组、字符串及元组中元素位置…

相约11月25日,开发者的嘉年华

》》厦门GDG DevFest 2018 2018 年 11 月 25 日,大家期待已久的厦门GDG DevFest 2018 将于厦门大学科艺中心隆重举行! 此次活动主题是时下最受关注的人工智能领域,邀请数位重量级嘉宾,带来关于 TensorFlow、Android等最新技术内容…

项目经理到底要不要懂技术?

不难发现,高薪项目经理岗位,往往对项目经理有技术要求。为什么会这样? 存在即合理,一定是现实中需要,项目实施过程中有必要。 想起了自己以前有次面试,二面是公司总经理,总经理说:…

搭建基于C#和 Appium 的 Android自动测试环境

移动端的自动化测试框架主要就是UiAutomator,Espresso,Robotium和功能最强大,也是比较热门的框架Appium如果想做手机端的自动化测试,Appium是首选的测试框架,因为网上使用的人多,资料丰富,支持语…

git 可视化工具_Git的基本使用(二)

通过前文Git的基本使用(一)的学习,相信大家对如何将iOS项目通过Git传到GitHub账户上有了一个基本的了解,其过程是相对繁琐和容易出错的。本文将告诉大家借助工具来帮助我们实现这些操作,并对前文进行进一步补充。一、两个软件Visual Studio C…

小米8配哪个版本的MIUI?

小米8之前我是忠实的魅粉,魅族手机用过M8,MX3,note5,MX6 pro。 魅族真的是被联发科的cpu坑了,一核有难,八核围观。 入手小米8,miui是9,一路跟着系统自动更新,更新到了12。…

3D设计桌面云

榕力3D设计桌面云方案,为使用GPU高负载应用的设计师们提供强大支持,如3D建模、光线追踪、渲染计算等领域,带来极致流畅的3D设计桌面体验,同时提升工作效率、可管理性和安全性。 3D设计桌面云方案满足了工业客户在专业设计场景中的…

PDF图片文字识别

工具 adobe acrobat XI PRO 没有安装该软件的,需下载安装,有了此软件,pdf随意改,必备! 步骤 1.打开pdf文件,点击工具---文本识别---在本文件中 2.选择“所有页面”,点击“编辑” 3.选择语言&a…

python中import的作用_python使用import报错是什么原因

在练习Python中package的相对导入时,即from . import XXX 或者from .. import XXX 有时会遇到这样两个错误:SystemError: Parent module not loaded, cannot perform relative import 和ValueError: attempted relative import beyond top-level packag…

win10卓越性能模式,提升电脑性能

Win10隐藏了一个电源模式“卓越性能”,是比“高性能”模式更强性能的电源模式。 这个模式开启后,电脑到底有没有变快呢?心理上是快了。 开启步骤 1.鼠标移到开始按钮图标上,别动!!!&#xff…

Redis Sentinel 模拟故障迁移

什么是redis sentinel 参考文档:https://redis.io/topics/sentinel 简单的来说,就是Redis Sentinel 为redis 提供高可用性,主要体现在下面几个方面:1.监控:redis sentinel会不间断的监控主服务器和从服务器是否正常工作2.通知:当出现问题时,…

python2中文输出代码_解决vscode python print 输出窗口中文乱码的问题

解决vscode python print 输出窗口中文乱码的问题 发布时间:2020-09-17 23:53:25 来源:脚本之家 阅读:119 一、搭建 python 环境 在 VSC 中点击 F1 键,弹出控制台,输入 ext install 界面左侧弹出扩展窗格,输…

十二赞日志收集与报警系统一览

先快速介绍一下十二赞的日志收集系统:十二赞的日志收集系统,分为两块,一块是线上系统的各种报错、异常的日志收集,主要是各种线上代码运行期间产生,我们称之为log-collect,一块是用户行为操作的日志收集&am…

招标投标法(摘录)

黑色:原文 红色:重点 蓝色:博主批注 第三条 在中华人民共和国境内进行下列工程建设项目: (一〉大型基础设施、公用事业等关系社会公共利益、公众安全的项目; ( 二〉全部或者部分使用国有资…

erp生产管理系统流程_企业生产管理好帮手——ERP智能管理系统

ERP企业管理软件是为企业决策层及员工提供决策运行手段的管理平台。在生产制造制造业中,尽管加工早已用于机械自动化,但在仓库管理、人工管理工作,还必须erp公司智能管理系统协助管理方法。erp公司管理软件是公司供应链管理的综合性管理软件&…

神经网络的基本工作原理

神经网络的基本工作原理 一、总结 一句话总结:先给一个初始值,然后依赖正确值(真实值)进行修复模型(训练模型),直到模型和真实值的误差可接受 初始值 真实值 修复模型 1、神经网络由基本的神经元…

政府采购法(摘录)

黑色:原文 红色:重点 蓝色:博主批注 第七条 政府采购实行集中采购和分散采购相结合。集中采购的范围由省级以上人民政府公布的集中采用目录确定。 属于中央预算的政府采用项目,其集中采用目录由国务院确定并公布;属…