zoukankan      html  css  js  c++  java
  • .Net垃圾回收机制

     

    Finalize,析构函数,Dispose,Close 

    语法方面

    每个类都会继承Object基类的Finalize方法,也可以重写它;但是Finalize方法比较特殊,不能像普通方法那样使用override关键字重写。Finalize(){ ~Class };调用Finalize就是调用类的析构函数;

    如果类没有析构函数,调用Finalize方法实际上什么都没执行。如果你想重写Finalize方法,就为类添加析构函数即可;类的析构函数能自动调用基类的Finalize方法;

    可以说Finalize方法就是析构函数;

    Close(){Dispose()};

    托管资源和非托管资源

    托管资源

    是指.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。托管资源的回收工作不需要人工干预,由.NET运行库在合适时机(感到内存不足)调用垃圾回收器进行回收。

    非托管资源

    是指.NET不知道如何回收的资源,最常见的一类非托管资源是包装了操作系统资源的对象,例如文件,窗口,网络连接,数据库连接,画刷,图标等。

    这类资源,垃圾回收器在清理的时候会调用Object.Finalize()方法。默认情况下,方法是空的,对于非托管对象,需要在此方法中编写回收非托管资源的代码,以便垃圾回收器正确回收资源。

    在.NET中,Object.Finalize()方法是无法重载的,编译器是根据类的析构函数来自动生成Object.Finalize()方法的,所以对于包含非托管资源的类,可以将释放非托管资源的代码放在析构函数。

    垃圾回收机制

    回收一个不含托管资源的对象

    1,调用类的Finalize方法,因为无非托管资源

    2,

  • 相关阅读:
    QT常用技巧--程序延时
    python中zip()函数的用法
    numpy.random.choice(a, size = None, replace = True, p = None)用法
    Python keras.layers .ZeroPadding2D() 详解
    Socat 入门笔记
    echo命令的使用
    Type Error('keyword argument not understood: ', 'interpolation') 解决方案
    Pytorch 包下载
    双边滤波Matlab代码
    hihocoder 第170周 Word Construction (dfs+剪枝)
  • 原文地址:https://www.cnblogs.com/maoshuyi/p/9751007.html
Copyright © 2011-2022 走看看