【问题标题】:Do destructors affect performance?析构函数会影响性能吗?
【发布时间】:2020-05-30 11:36:11
【问题描述】:

我在我的一个基类中添加了一个析构函数,用于帮助寻找内存泄漏,如下所示:

#if DEBUG
~BaseViewModel()
{
    Debug.WriteLine("View Model Disposed");
}
#endif

即使删除 Debug.WriteLine 代码

存在析构函数会影响调试构建的性能吗?

【问题讨论】:

  • 拥有一个将使您的对象保持更长时间,因为它将被添加到 GC 的终结器队列中。如果不需要,不要添加。
  • 你不需要它......你删除的任何东西都会以某种方式提高性能,但这是你可以测试的东西。如果不使用非托管资源,通常不需要它。
  • 首先,对于性能检查 - 你需要自己测试,这是唯一的方法。其次,这看起来是一种很糟糕的查找内存泄漏的方法。
  • 学习使用分析器,这样您就不必像这样进行测试了
  • 您还需要弄清楚您的术语。 Destructor 和 Disposal 和是同一个概念。

标签: c# performance memory-management garbage-collection destructor


【解决方案1】:

According to Microsoft Documentation

不应使用空的终结器。当一个类包含一个 finalizer,在 Finalize 队列中创建一个条目。当。。。的时候 finalizer 被调用,垃圾收集器被调用来处理 队列。一个空的终结器只会导致不必要的性能损失。

只有当你的类中有非托管资源时,你才需要一个析构函数(终结器)。如果你添加一个析构函数,你应该在 Dispose 中抑制 Finalization。否则会导致你的对象在内存中停留的时间更长,因为它们会被添加到终结器队列中。 (注:Read how Finalization works)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 2011-07-07
    • 1970-01-01
    • 2011-04-09
    • 2021-04-29
    • 2012-02-04
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多