zoukankan      html  css  js  c++  java
  • MCPD 70536题目 非托管资源 释放

      You are creating a class that uses unmanaged resources. This class maintains references to managed resources on other objects. You need to ensure that users of this class can explicitly release resources when the class instance ceases to be needed. Which three actions should you perform? (Each correct answer presents part of the solution. Choose three.)

      你正在创建一个使用非托管资源的类。该类维持在其它对象上管理托管资源的引用。你需要确保停止类实例时能够确实释放资源。哪三个动作你会执行。(每个正确的答案提供方案的一部分。选择3个)

      ADefine the class such that it inherits from the WeakReference class.

      BDefine the class such that it implements the IDisposable interface.  (定义继存自IDisposable接口的类)

      CCreate a class destructor that calls methods on other objects to release the managed resources.

      DCreate a class destructor that releases the unmanaged resources.  (创建释放非托管资源的析构函数)

      ECreate a Dispose method that calls System.GC.Collect to force garbage collection.

      FCreate a Dispose method that releases unmanaged resources and calls methods on other objects to release the managed resources.   (创建Dispose方法用于释放非托管资源,并且在其它对象上调用此方法释放托管资源)

     

    答案:BDF 

    注:

      E:垃圾回收器(System.GC.Collect),只能释放托管资源,不能释放非托管资源

     

    测试代码
      创建一个控制台应用程序。并建立ManageResource类,此类使用非托管资源handle。当类使用完后,释放非托管资源。

    namespace UnManageResource
    {
        
    class
     Program
        {
            
    static void Main(string
    [] args)
            {
                //使用完后释放资源
                
    using (ManageResource umr = new
     ManageResource())
                {

                }

                ManageResource umrTry 
    = new
     ManageResource();
                
    //使用完后释放资源

                try
                {

                }
                
    finally
                {
                    
    if (umrTry != null)
                    {
                        umrTry.Dispose();
                    }
                }
            }
        }

        
    //继承IDisposable,用于释放资源

        class ManageResource : IDisposable
        {
            
    //非托管资源

            private IntPtr handle;

            
    //析构函数

            ~ManageResource()
            {
                
    //释放资源

                ReleaseResource();
            }

            
    #region IDisposable Members


            
    //显示释放未托管资源
            public void Dispose()
            {
                
    //释放资源

                ReleaseResource();

                
    //不调用析构函数。由于用户是显示调用,所以资源释放不再由GC来完成

                GC.SuppressFinalize(this);
            }
            
    #endregion


            
    /// <summary>
            
    /// 释放资源方法
            
    /// </summary>

            private void ReleaseResource()
            {
                
    //释放非托管资源

                handle = IntPtr.Zero;
            }
        }
    }

     

     

     

     

  • 相关阅读:
    postgre通过sql释放空闲连接
    LeetCode Weekly Contest 255
    响应式编程基础教程:Spring Boot 与 Lettuce 整合
    响应式编程基础教程:Spring Boot 与 R2DBC 整合
    Spring WebFlux 基础教程:WebSocket 使用
    Spring WebFlux 基础教程:参数校验
    Spring WebFlux 基础教程:快速入门
    LeetCode | 46. 全排列
    LeetCode | 买卖股票的最佳时机
    LeetCode | 动态规划_小青蛙跳楼梯
  • 原文地址:https://www.cnblogs.com/scottckt/p/1846165.html
Copyright © 2011-2022 走看看