zoukankan      html  css  js  c++  java
  • 托管和非托管

      .NET绝大内存垃圾会有 Common Language Runtime (CLR) 公共语言运行时自动回收,但是有一部分需要我们来手动回收。

    托管资源:一般指CLR控制的内存资源, 资源由CLR来管理。GC负责垃圾回收

    非托管资源:不受CLR控制和管理的资源。GC不知道如何释放,需要人工进行释放。

    非托管包括:

    文件流,图像类型类,数据库连接,网络连接等等。

    如何释放非托管资源:

    简单来说可以使用using 来释放资源

    当使用using,编译器自动翻译成 try... finally.  在finally 里面实现  xxx.Dispose();

    注意方向:

    在.NET中应该尽可能的少用析构函数释放资源。在没有析构函数的对象在垃圾处理器一次处理中从内存删除,但有析构函数的对象,需要两次,第一次调用析构函数,第二次删除对象。而且在析构函数中包含大量的释放资源代码,会降低垃圾回收器的工作效率,影响性能。

    对于包含非托管资源的对象,最好及时的调用Dispose()方法来回收资源,而不是依赖垃圾回收器

    在.NET中,凡是继承了IDisposable接口的类,都可以使用using语句,从而在超出作用域后,让系统自动调用Dispose()方法。

    更多内容可以查看

    https://www.cnblogs.com/yubinfeng/p/4625833.html

  • 相关阅读:
    认识计算机
    Sum 类型题目总结
    3Sum Smaller 解答
    3Sum Closest 解答
    Roman to Integer && Integer to Roman 解答
    Longest Common Prefix 解答
    Shortest Word Distance 解答
    Longest Valid Parentheses 解答
    Lowest Common Ancestor of a Binary Search Tree 解答
    Longest Palindromic Substring 解答
  • 原文地址:https://www.cnblogs.com/TheMiao/p/9218901.html
Copyright © 2011-2022 走看看