RT

解决方案 »

  1.   

    转贴 C#高级编程第三版请参考释放类所使用的未托管资源的两种方式:
    利用运行库强制执行的析构函数,但析构函数的执行是不确定的,而且,由于垃圾收集器的工作方式,它会给运行库增加不可接受的系统开销。
    IDisposable接口提供了一种机制,允许类的用户控制释放资源的时间,但需要确保执行Dispose()。
    一般情况下,最好的方法是执行这两种机制,获得这两种机制的优点,克服其缺点。假定大多数程序员都能正确调用Dispose(),实现IDisposable接口,同时把析构函数作为一种安全的机制,以防没有调用Dispose()。
      

  2.   

    如果你安装有VS2005的MSDN
    ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.chs/dv_vbalr/html/548eebe1-86c4-4377-b2f5-447cb8be3d90.htm仔细看看生存期就完全明白了,如楼上所说,无外乎就是IDisposable接口的一种实现的模式罢了回收肯定不会两次,在第一个Dispose它就消失了。
            Protected Overridable Sub Dispose(ByVal disposing As Boolean)
                If Not Me.disposed Then
                    If disposing Then
                        ' Insert code to free unmanaged resources.
                    End If
                    ' Insert code to free shared resources.
                End If
                Me.disposed = True
            End Sub看到没有,到了析构函数,是要判断对象的disposed是否为真的。如果已经释放,是不会再有什么动作的了。
      

  3.   

    当然不会回收两次了
    只不过两者各有特点
    析构函数缺乏确定性和对无用存储单元收集器性能的影响。特别是因为无用存储单元收集器很可能在不需要对象后过一段时间才调用,该对象引用的资源被占用的事件就会比较需要的时间长。此时建议用Dispose()方法