zoukankan      html  css  js  c++  java
  • C#处理非托管资源

    using System;
    
    //处理非托管资源
    //例如:文件句柄、网络连接、数据库连接
    
    //实现IDisposable不意味着也应该实现一个终结器,终结器会带来额外开销
    //发布本机资源,要释放本机资源就需要终结器
    
    //如果实现了终结器,也应该实现IDisposabel接口
    //这样本机资源可以早些释放
    
    namespace ConsoleApp
    {
        //1.析构函数或终结器
        class MyClass
        {
            //C#无法确定对象的析构函数何时执行
            //会有延迟
            //频繁使用析构函数,而且使用它们执行长时间的清理任务,对性能影响就会非常显著
            ~MyClass()
            {
                //其实是Finalize()方法
            }
        }
    
        //2.实现System.IDisposable
        class MyClass1 : IDisposable
        {
            public void Dispose()
            {
            }
        }
    
        //3.双重实现
        class MyClass2 : IDisposable
        {
            //表示对象是否已被清理
            private bool _isDisposed = false;
            public void Dispose()
            {
                //...
                Dispose(true);
                GC.SuppressFinalize(this);//告诉回收器不需要调用析构函数了
    
            }
    
            protected virtual void Dispose(bool disposing)
            {
                if (!_isDisposed)
                {
                    if (disposing)
                    {//...
                        //清理托管资源 
                    }
                    //...
                    //清理非托管
                }
                _isDisposed = true;
            }
    
            ~MyClass2()//只清理非托管
            {
                Dispose(false);
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                MyClass1 theInstance = null;
                //使用try/finally确保发生异常也能释放资源
                try
                {
                    theInstance = new MyClass1();
                }
                finally
                {
                    theInstance?.Dispose();
                }
    
                //如果这些大括号过多很容易混淆
                //也可以使用using来完成此工作,在变量超出作用域会自动调用Dispose()
                using (var ins = new MyClass1())
                {
                    //...
                }
    
            }
        }
    }
  • 相关阅读:
    python变量和常量
    python运算符
    python 数据类型强制转换
    Python 变量的缓存机制
    Python格式化输出
    Python 自动类型转换
    Python 六大标准基础数据类型
    Python 基础
    pyhton 初识
    计算机基础
  • 原文地址:https://www.cnblogs.com/xslwm/p/9590906.html
Copyright © 2011-2022 走看看