• 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;
           }
       }

  • 相关阅读:
    【Mobius绮丽的辗转】莫比乌斯反演
    【BZOJ2301】【HAOI2011】Problem b 莫比乌斯反演
    【JZOJ3636】【BOI2012】Mobile(mobile)
    【JZOJ3640】【COCI2014】utrka
    VMware虚拟机无法上网 无法启动VMnet0等问题【转载】
    java map 遍历
    java List<String> 转换成带逗号的字符串
    javascript 请求action传递中文参数乱码问题
    jQuery ajax 传递JSON数组到Spring Controller
    Eclipse 在线安装properties编辑插件
  • 原文地址:https://www.cnblogs.com/hanguoshun/p/12738490.html
Copyright © 2020-2023  润新知