zoukankan      html  css  js  c++  java
  • 【c#基础】非托管资源

    垃圾回收器不知道如果释放非托管资源

    非托管资源有:文件句柄、网络连接、数据库连接(有的在补充)

    有两种机制可以自动释放非托管资源。

    1:声明一个析构函数(或叫做终结器-finalizer),作为一个类的成员

    2:在类中实现System.IDisposable接口。

    垃圾回收器销毁对象之前,可以调用析构函数。

    c#析构函数的实现会延迟对象最终从内存中删除的时间。没有析构函数的对象会在垃圾回收器的一次处理中从内存中删除,但有析构函数的对象需要两次处理才能销毁,第一次调用析构函数时,没有删除对象,第二次调用才真正删除对象。 运行库使用一个线程来执行所有对象的Finalizer()方法,频繁使用析构函数,对性能影响非常大。慎用析构函数。

    IDisposable接口

    推荐用IDisposable接口替代析构函数。

    这个接口声明了一个Dispose()方法,这个方法的实现代码想显示地释放由对象直接使用的所有非托管资源。并在所有也实现IDisposeable接口的封转对象上调用Dispost()方法。

  • 相关阅读:
    logging 用于便捷记录日志且线程安全的模块
    win10安装多个mysql实例
    Windows安装mysql-msi
    webAPI解决跨域问题
    net core通过中间件防御Xss
    导出excel
    DES加密/解密类
    MySQL优化配置
    上传文件到服务器
    HttpWebRequest调用接口
  • 原文地址:https://www.cnblogs.com/SignX/p/10995496.html
Copyright © 2011-2022 走看看