none
清理所有正在使用的资源 RRS feed

  • 问题

  • 请问C#中清理所有正在使用的资源protected override void Dispose( bool disposing )
      {
       if( disposing )
       {
        if(components != null)
        {
         components.Dispose();
        }
       }
       base.Dispose( disposing );
            }是什么意思
    2010年11月18日 6:54

答案

  •  重载的方法同时完成析构和处理必须提供的任务,又因为它是虚函数,它为所有的派生类提供函数入口点。派生类可以重载这个函数,提供恰当的实现来释放它自己的资源,并且调用基类的函数。当
    isDisposing为true时你可能同时清理托管资源和非托管资源,当isDisposing为false时你只能清理非托管资源。两种情况下,都可以调用基类的Dispose(bool)方法让它去清理它自己的资源。

    参照

    http://hi.baidu.com/silyt/blog/item/a95965f59062ce20bd310976.html


    http://blog.csdn.net/zx13525079024
    2010年11月18日 7:37
  • Dispose 是一种 C# 设计方法,我之前在这里详细的讨论过一次,Dispose(Boolean) 的重载决策多出来的那个 Boolean 参数为 true 时,表示 CLR 调用的是 Dispose 方法而不是析构函数 (Finalizer) 去执行 GC 清理;当其为 false 时表示此时析构函数正在执行。因此,当其值为 true 时,可以安全的访问部分托管资源 (因为他们可能还没有被回收),然后调用相应资源的 Dispose 或者 Close 方法去让 GC 清理他们;当其值为 false 时,该类型的析构函数正在运行,并且由于析构函数不期待任何异常,而且此时,大多数托管资源已经被回收,此时再访问托管资源是很危险的 (会导致对象无法回收或者对象复活等诡异的现象),因此,此时,只能清理非托管资源以保证析构函数运行正常退出。

    详细的例子,您可以在此处搜索 mazhou 以及 IDisposable,以找到那一篇我的回帖。


    Mark Zhou
    2010年11月18日 8:27

全部回复

  •  重载的方法同时完成析构和处理必须提供的任务,又因为它是虚函数,它为所有的派生类提供函数入口点。派生类可以重载这个函数,提供恰当的实现来释放它自己的资源,并且调用基类的函数。当
    isDisposing为true时你可能同时清理托管资源和非托管资源,当isDisposing为false时你只能清理非托管资源。两种情况下,都可以调用基类的Dispose(bool)方法让它去清理它自己的资源。

    参照

    http://hi.baidu.com/silyt/blog/item/a95965f59062ce20bd310976.html


    http://blog.csdn.net/zx13525079024
    2010年11月18日 7:37
  • Dispose 是一种 C# 设计方法,我之前在这里详细的讨论过一次,Dispose(Boolean) 的重载决策多出来的那个 Boolean 参数为 true 时,表示 CLR 调用的是 Dispose 方法而不是析构函数 (Finalizer) 去执行 GC 清理;当其为 false 时表示此时析构函数正在执行。因此,当其值为 true 时,可以安全的访问部分托管资源 (因为他们可能还没有被回收),然后调用相应资源的 Dispose 或者 Close 方法去让 GC 清理他们;当其值为 false 时,该类型的析构函数正在运行,并且由于析构函数不期待任何异常,而且此时,大多数托管资源已经被回收,此时再访问托管资源是很危险的 (会导致对象无法回收或者对象复活等诡异的现象),因此,此时,只能清理非托管资源以保证析构函数运行正常退出。

    详细的例子,您可以在此处搜索 mazhou 以及 IDisposable,以找到那一篇我的回帖。


    Mark Zhou
    2010年11月18日 8:27