zoukankan      html  css  js  c++  java
  • 如何实现真正的IDispose?

    最近在项目开发的过程中, 我们的一个数据同步程序碰到了资源无法释放的问题。我使用的定位方法是性能计数器(Perfmon.msc), 显然这只是一个很粗矿的判断。后通过Code Review我们的代码中定义了一个同步的中间类, 该类中会缓存大量的中间数据集。而程序中么有及时的回收这些临时对象, 最终我建议该类实现一下IDispose接口。这里我结合网上的资料以及MSDN的建议实现了一个标准的IDispose接口, 代码如下:

    
    
    View Code
    public class SampleClass : System.IDisposable
    {
    private bool alreadyDisposed=false;
    //供程序员显式调用的Dispose方法
    public void Dispose()
    {
    //调用带参数的Dispose方法, 释放托管和非托管资源
    Dispose(true);
    //手动调用了Dispose释放资源,那么析构函数就是不必要的了, 这里阻止GC调用析构函数
    System.GC.SuppressFinalize(this);
    }

    //protected的Dispose方法, 保证不会被外部调用。
    //传入bool值disposing以确定是否释放托管资源
    protected void Dispose(bool disposing)
    {
    if (alreadyDisposed) return; //保证不重复释放

    if (disposing)
    {
    ///TODO:在这里加入清理"托管资源"的代码, 应该是xxx.Dispose();
    }
    ///TODO:在这里加入清理"非托管资源"的代码

    alreadyDisposed=true;
    }

    //供GC调用的析构函数
    ~SampleClass ()
    {
    Dispose(false);//释放非托管资源
    }
    }




    作者:Olar Tan
    出处:http://www.cnblogs.com/olartan
    ♪:没有做不到的 只有偷懒而错过的 ♪

  • 相关阅读:
    Objective-C多线程-02
    Objective-C多线程-01
    Objective-C的属性与实例变量
    KVO的内部实现原理
    ASIHTTPRequest 和 AFNetWorking 的比较
    Python类和函数_规划式开发
    禁用密码登录,改用key秘钥对登录
    Python类和函数_时间与纯函数
    Python类和对象_调试与术语
    Python类和对象_修改和复制
  • 原文地址:https://www.cnblogs.com/olartan/p/2288566.html
Copyright © 2011-2022 走看看