文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>c# finalize 和 dispose

c# finalize 和 dispose

时间:2010-12-18  来源:wuye_chinaunix

c# finalize 就是析构函数,即destructor;
    dispose 是设计为了主动释放非托管资源(同时也可以释放包含的托管资源使用的非托管资源)。

dispose是主动释放,一般用using语法可以代为实现
finalize是GC 来调用,时间和顺序不可预知。


为了及时释放非托管资源,我们利用dispose。

在finalize中我们需要注意,不要调用释放相关托管资源的dispose,因为这个时候相关托管资源的状态不可预知。

托管资源的释放有2个阶段; 第一个阶段调用finalize,进行主动清理, 第二个阶段真正释放占用内存。
如果我们不需要主动释放或清理动作,我们可以使用GC.SuppressFinalize(this) 来忽略此过程,节省。


using System;
public class ResourceHolder : IDisposable
{
    private bool isDisposed = false;

    //主动调用释放资源的dispose(using)
    public void Dispose()
    {
    Dispose(true);  //true参数表明可以把包含的托管资源的dispose进行调用
    GC.SuppressFinalize(this);  //dipose后告诉GC不需要再调用finalize了
    }
protected virtual void Dispose(bool disposing)
{
    if (!isDisposed)  //如果没有dispose过
    {
        if (disposing)  //如果真表明需要主动释放相关非托管资源
        {
            // Cleanup managed objects by calling their  Dispose() methods.
        }

        //释放非托管资源
        // Cleanup unmanaged objects
    }

    isDisposed = true;  //指示已经dipose过了
}

//被GC调用了的析构函数
~ResourceHolder()
{
    Dispose (false);
}

public void SomeMethod()
{
// Ensure object not already disposed before execution of any method
if(isDisposed)
{
throw new ObjectDisposedException(“ResourceHolder”);
}
// method implementation …
}
}
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载