回到目录

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. unity 实现物体破碎效果的一些方法

    游戏越来越接近现实的感觉,如果有一个真是的 虚拟现实设备,可能我们真的会感觉是在真实世界.场景的逼真是在渲染效果.角色AI.游戏逻辑.物理效果等等一起导致的结果.现在游戏越来越大,除了渲染,物理估计是 ...

  2. HTML5所有标签汇总

    来自lampbrother兄弟连HTML5与CSS3教程.<xmp> 结构标签:(块状元素) 有意义的div<article>     标记定义一篇文章<header&g ...

  3. java连接Oracle数据库

    Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表: create table student ( id ) not null primary key, ...

  4. gc roots 垃圾回收

    gc roots包括以下几个: 虚拟机栈(栈桢中的本地变量表)中的引用对象 方法区中的类静态属性引用的对象 方法区中的常量引用的对象 本地方法栈中JNI(即native方法)的引用的对象 java,c ...

  5. SpringMVC常用注解實例詳解2:@ModelAttribute

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  6. <转>技术团队新官上任之基层篇

    发表于2013-09-04 17:17| 10455次阅读| 来源<程序员>| 35 条评论| 作者高博 <程序员>杂志2013年9月刊技术团队管理EMC高博CTO 摘要:从技 ...

  7. AKI

    KDIGO 2012定义:尿量<0.5ml/kg/h 6h+:scr上升50%+ 7d-:scr上升26.5 2d- 但面对录入窗口,又想不出说什么了,继续看aki?刚才想的是什么呢?入冬,好像 ...

  8. [Python] Pitfalls: Be Careful with os.chdir

    One thing you need to keep in mind is that when using os.chdir to change the working directory of cu ...

  9. 使用ASP.NET MVC操作过滤器记录日志(转)

    使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_Filte ...

  10. testng参数化(提供测试数据)【转】

    testng提供测试数据的两个注释:@DataProvide和@Parameter   一.通过testng.xml中设置参数 (实际上testng.xml只是一个名字,可以起任何一个名字,只要是.x ...