• .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,

  • 相关阅读:
    C语言截取从某位置开始指定长度子字符串方法
    vim:放弃hjkl
    vim资源
    PHP和.NET通用的加密解密函数类,均使用3DES加解密 .
    Java与.NET DES加密解密互转
    案例:使用正则表达式的爬虫
    爬虫的正则表达式re模块
    爬虫中Requests模块
    Oracle系列十一 数据处理
    爬虫urllib2 的异常错误处理URLError和HTTPError
  • 原文地址:https://www.cnblogs.com/maoshuyi/p/9751007.html
Copyright © 2020-2023  润新知