gpt4 book ai didi

c# - 为什么我的析构函数从不运行?

转载 作者:可可西里 更新时间:2023-11-01 08:22:12 53 4
gpt4 key购买 nike

我有一个带有析构函数方法的空白 Winform

public partial class Form1 : Form
{
public Form1()
{
System.Diagnostics.Trace.WriteLine("Form1.Initialize " + this.GetHashCode().ToString());
InitializeComponent();
}
~Form1()
{
System.Diagnostics.Trace.WriteLine("Form1.Dispose " + this.GetHashCode().ToString());
}
}

当表单被销毁时,我希望它写入输出窗口:

(Form1 opened)Form1.Initialize 41149443(Form1 closed)Form1.Dispose 41149443

MSDN 建议了 3 种实现析构函数的方法:

但是,这些方法都没有将“Form1.Dispose 41149443”写入输出窗口。因此,我无法判断表格是否已被破坏。建议?

由于垃圾收集器的不确定性,我是否应该放弃实现这一目标的希望?

有没有其他方法可以知道 Form1 是否已被垃圾回收?

最佳答案

您列出的实现析构函数的三种方法中只有一种实际上涉及析构函数,即 ~Destructor()

如果您实现了 IDisposable 并释放了您的对象,那么 Dispose 中的代码将会运行,但没有理由认为您的析构函数会运行。

我认为你在这里追逐不可能。析构函数按照垃圾收集器的指示运行。这不是你能控制的。 GC 完全有权形成运行析构函数只是浪费时间的观点,如果有足够的内存,它就会形成这种观点。

如果您需要可预测的处置、终结等,请使用 IDisposable

关于c# - 为什么我的析构函数从不运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6931305/

53 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com