我对这个类的理解是,当你想确定调用Finalizer(析构函数)或类时,你应该使用它,但是从我做过的几个测试中,它似乎不是真的。如果它不能确保调用dispose方法,还有其他方法吗?例如,如果我想确保运行一些代码来结束我的对象,即使我通过任务管理器关闭我的程序还是什么?
答案 0 :(得分:8)
答案 1 :(得分:2)
<。> .Net中的终结器是非确定性的。这意味着当调用终结器时,无法保证。仅仅因为一个物体超出范围甚至被处理掉,并不意味着将立即调用终结器。垃圾收集器将在未来的某个未知时间绕过它。从我做过的几次测试中,它似乎都不是真的。
答案 2 :(得分:2)
如果真的需要在程序为Ctrl + Alt + Del'd时运行代码,我认为除了拥有监控第一个状态的单独程序之外别无其他办法。如果你真的需要这么多的架构,我想你会想要使用服务和一些客户端应用程序,或者一对或服务。
但是,假设您已经查看了应用程序事件。如果还没有,请查看this overview。
编辑可能比ApplicationExit event更好。
答案 3 :(得分:0)
Finalize()
方法和Dispose()
方法是不同的。
默认情况下,永远不会调用Dispose
。你必须自己从Finalize
方法调用它。考虑以下情况(为简洁起见,忽略适当的finalize / dispose模式中的明显失败):
public class Foo : IDisposable
{
public void Dispose()
{
// NOP
}
~Foo()
{
Dispose();
}
}