【问题标题】:Difference between Class destructor and Dispose [duplicate]类析构函数和 Dispose 之间的区别
【发布时间】:2013-07-26 07:52:28
【问题描述】:

简单的问题。类析构函数和 dispose 有什么区别。假设在我的类中,我有一个 RegistryKey、一个 COM 对象和一些在类对象超出范围时需要处理的东西。我有执行此操作的代码,并且我已将其放在析构函数和 dispose 方法中。在这里最好使用什么。

public MyClass : IDisposable
{
    public ICOMObject SomeCOMObject;
    public RegistryKey registryKey;

    MyClass()
    { Initialize things; }

    ~MyClass()
    {
        ClearThings();
    }

    public void Dispose()
    {
        ClearThings();
    }

    private void ClearThings()
    {
        // Clear things.
    }
}

【问题讨论】:

标签: c# destructor dispose


【解决方案1】:

区别:您不能显式调用析构函数。当您的对象超出范围或程序退出时,它将自动调用。

Dispose 是一种您可以控制的方法,可以单独编写以释放对象中的托管和非托管资源,或者在您实现 IDisposable 接口时可用。您可以随时调用它来清理资源。

关于您的问题。理想情况下,您应该在 Dispose 方法中显式处理任何非托管资源。但是您也可以在 Destructor 中调用相同的方法(作为预防措施),因为 GC 不会处理这些。除非你明确地处理掉它们,否则它们将保留在内存中。

注意:如果您决定从 Destructor 和 Dispose 调用相同的方法,那么在对您正在处理的方法调用 dispose 之前,请检查对象是否尚未被处理。

您可以阅读有关析构函数的更多信息here

【讨论】:

  • 另外:调用 Dispose() 或将代码封装在 using 块中会稍微提高性能。让垃圾收集器运行 Finalize()(或您的析构函数)会更慢。
猜你喜欢
  • 2012-12-08
  • 2010-11-20
  • 2012-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-07
相关资源
最近更新 更多