回到目录

IDispose模式在C++中用的很多,用来清理资源,而在C#里,资源分为托管和非托管两种,托管资源是由C#的CLR帮助我们清理的,它是通过调用对象的析构函数完成的对象释放工作,而对于非托管系统来说,则需要我们自己来释放,例如数据库连接对象,这就需要我们手动去调用它的Dispose()方法来实现对象它的释放,事实上,Dispose()内容到底做了什么事,我们并不清楚,当然这就是面向对象,它不希望你关系实现的细节,呵!

对于我们开发人员来说,在了解它怎么用之后,总会对它如何实现的产生兴趣,下面,我将把C#里实现IDispose模式的代码展现出来,大家一起来学习一下,事实上,它的使用场合也很多的,当我们手动对网站,数据库作封装时,都会用的到,下面看一下代码:

 /// <summary>
/// 实现IDisposable,对非托管系统进行资源回收
/// </summary>
public class IDisplosePattern : IDisposable
{
public void Dispose()
{
this.Dispose(true);////释放托管资源
GC.SuppressFinalize(this);//请求系统不要调用指定对象的终结器. //该方法在对象头中设置一个位,系统在调用终结器时将检查这个位
} protected virtual void Dispose(bool disposing)
{
if (!_isDisposed)//_isDisposed为false表示没有进行手动dispose
{
if (disposing)
{
//清理托管资源
}
//清理非托管资源
}
_isDisposed = true;
} private bool _isDisposed; ~IDisplosePattern()
{
this.Dispose(false);//释放非托管资源,托管资源由终极器自己完成了
}
}

通过上面的代码,我们知道了,对于托管系统(C#的CLR为我们管理的),直接通过~IDisplosePattern()方法进行释放,而~IDisplosePattern()这个方法何时被调用,我们是不知道的,因为它是由CLR帮助我们调用的,而我们手动进行dispose方法时,它会调用dispose(true)这个重载方法,它会帮助我们清理托管和非托管资源,如图:

aaarticlea/png;base64,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" alt="" />

回到目录

基础才是重中之重~C#中标准的IDispose模式的更多相关文章

  1. C#中标准的IDispose模式

    C#实现IDispose接口   .net的GC机制有两个问题:首先GC并不能释放所有资源,它更不能释放非托管资源.其次,GC也不是实时的,所有GC存在不确定性.为了解决这个问题donet提供了析构函 ...

  2. WPF MVVM UI分离之《交互与数据分离》 基础才是重中之重~delegate里的Invoke和BeginInvoke 将不确定变为确定系列~目录(“机器最能证明一切”) 爱上MVC3系列~全局异常处理与异常日志 基础才是重中之重~lock和monitor的区别 将不确定变成确定~我想监视我的对象,如果是某个值,就叫另一些方法自动运行 将不确定变成确定~LINQ DBML模型可以对

    WPF MVVM UI分离之<交互与数据分离>   在我们使用WPF过程中,不可避免并且超级喜欢使用MVVM框架. 那么,使用MVVM的出发点是视觉与业务逻辑分离,即UI与数据分离 诸如下 ...

  3. 基础才是重中之重~理解linq中的groupby

    linq将大部分SQL语句进行了封装,这使得它们更加面向对象了,对于开发者来说,这是一件好事,下面我从基础层面来说一下GroupBy在LINQ中的使用. 对GroupBy的多字段分组,可以看我的这篇文 ...

  4. 基础才是重中之重~关于ThreadStatic和Quartz的一点渊源

    回到目录 ThreadStatic ThreadStatic是C#里的一个特性,它可以让你的字段在一个线程里有效,但你不能控制这个字段在何时被回收,即如果声明一个int32的字段为ThreadStat ...

  5. C# 基础才是重中之重~对象的生与死

    为何要写 之所以写这篇文章,完全是因为学生们在实际开发中遇到的问题,一个对象占用的内存空间总不被释放,导致系统内存不断攀升,其最主要原因是我们对“对象的生与死”不清楚,或者从来没有认真去考虑过这件事, ...

  6. 基础才是重中之重~方法override详解

    回到 目录 之所以写这篇文章,完全是因为这次代码审核,这次代码审核过程当中,出现了很多我认为基础知识不够扎实的问题,所以,打算把它们记录下来,共大家分享. 方法的override,即方法的覆写或者重写 ...

  7. 基础才是重中之重~stream和byte[]的概念与转化

    回到目录 多看几篇 之所以写这篇文章完全是因为最近在研究FastDFS这个分布式的文件存储系统,当然这不是我第一次研究它了,就像我们去看一本书,我们不会只看一篇,而是一次次,一篇篇,每看一次会有新的收 ...

  8. 基础才是重中之重~lock和monitor的区别

    回到目录 Monitor的介绍 1.Monitor.Enter(object)方法是获取锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中 ...

  9. 基础才是重中之重~Emit动态构建方法(参数和返回值)

    回到目录 对于Emit我们知道它的可以动态构建程序集,类型,方法,属性等,或者说只要手动使用C#创建的东西使用Emit也都可以动态创建它们,Emit由于它的特别之处,所以在很多领域得到了广泛的应用,像 ...

随机推荐

  1. linux mysql操作命令

    1.linux下启动mysql的命令:mysqladmin start/ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令:mysqla ...

  2. Android软件设计---Dumpsys工具使用

    Android中提供的dumpsys工具,用于分析Android性能.Android系统中,列出所有可用的dumpsys指令. 使用dumpsys查看memory信息: shell@aeon6735m ...

  3. jsp实现回车登录

    <body onkeydown="if(event.keyCode==13){login()}"> 内容0...... </body> 注:body里面加上 ...

  4. spring aop一些名词的理解

    最近想深入了解spring,已经使用spring一段时间,但是对spring的理解一直很肤浅,先把几个常见的名词理解一下. 比如一个ssh架构的电商系统上面有用户模块,商品模块,订单模块,支付模块等, ...

  5. UVaLive 7143 Room Assignment (组合数+DP)

    题意:有 n 个客人,m个房间,每个房间可住ci个人,这 n 个人中有 t 对双胞胎,sum{ci}  = n 问你有多少种住房方法. 析:计数DP,dp[i][j] 表示前 i 个房间,还剩下 j ...

  6. iOS 的文字滚动条效果的实现

    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(50, 100, 300, 50)]; label.text  = @"欢 ...

  7. 转发!HTML 复选框 checkbox 的 JavaScript 的全选和全反选

    checkbox 或者按钮实现 form 内的 checkbox 全选或者反选,代码很简单,全部代码如下: <html> <head> <meta http-equiv= ...

  8. AutoLayout - VFL

    其实很早就像整理出一份VFL的总结出来,觉得有很多东西可以写,但是真正去总结的时候发现,VFL也并没有很多东西,其实应该是在布局的过程中直接用VFL语句思考的过程比较难以形成,多数布局问题其实是在实际 ...

  9. [ASE][Daily Scrum]12.05

    占坑 最近大家都很忙所以工作准备放到周末来做……所以这两天进度会比较慢.

  10. 中国大学MOOC-陈越、何钦铭-数据结构-2016秋期末考试

    判断题: 1-1 N2logN和NlogN2具有相同的增长速度. (2分) 1-2 对一棵平衡二叉树,所有非叶结点的平衡因子都是0,当且仅当该树是完全二叉树.(2分) 1-3 无向连通图所有顶点的度之 ...