zoukankan      html  css  js  c++  java
  • C# 托管资源与非托管资源(自己总结)

    其实我的关注点是哪些需要手动的去释放资源。

    包括:比如文件流、图像图形类、数据库的连接,网络连接,系统的窗口句柄,打印机资源等,这类资源一般不存在堆上。可以认为操作系统资源的一组API。具体可以参考MSDN

    我的理解是主要有两种情况:

    一、这些需要手动释放资源的变量出现在类的方法里,当方法结束的时候需要去手动或显示的释放这些资源。比如下边代码,通过用using 显示释放资源

    using(SqlConnection conn = new SqlConnection())

    {

          //do something;

    }

    c#使用using简化输入,编译器自动翻译成 try...finally,等同于下面写法

    SqlConnection conn = new SqlConnection();

    try

    {

        //do something;

    }

    finally

    {

        conn.Dispose();

    }
    使用using要求后边的实例必须实现IDisposable接口

    二、这些需要手动释放资源的变量出现在类的字段里,这时候需要让这个类实现IDisposable接口,程序别的地方用到这个类实例的时候,就可以通过调用实例的Dispose()来显示的释放资源

    标准清理模式,代码如下:
    MyClass:IDisposable
        {
            private bool disposed = false;
            ~MyClass()
            {
                Dispose(false);
            }
       
            public void Dispose()
            {
               Dispose(true);
               GC.SuppressFinalize(this);
            }
          
           private void Dispose(bool disposing)
           {
              if(disposed == false)
              {
                   if(disposing == true)
                   {
                      // 释托管代码
                      ......
                   }
                  // 释非代码
                 ......
              }
              disposed = true;
           }
       }

  • 相关阅读:
    hxpCTF 2021 revvm Writeup
    微博自动化测试
    RosettaScripts学习笔记20211118
    amber进行分子动力学模拟水盒子和density需要注意的事项
    linux bash 字符串替换
    JQuery常用方法基础教程
    一些Js实现圆角的资料
    分享十个应用最广的Javascript框架
    .NET获取ACCESS自动编号列的一种方法(转)
    asp.net 底层资料
  • 原文地址:https://www.cnblogs.com/hanguoshun/p/12738490.html
Copyright © 2011-2022 走看看