gpt4 book ai didi

c# - 析构函数 - 如果应用程序崩溃,它会被调用吗

转载 作者:行者123 更新时间:2023-12-02 20:20:01 25 4
gpt4 key购买 nike

如果应用程序崩溃,析构函数会被调用吗?如果这是一个未处理的异常,我猜它确实如此,但是更严重的错误,或者像用户终止应用程序进程这样的错误呢?

还有一些可能愚蠢的问题:

  • 当应用程序退出并且所有终结器都已执行时,应用程序中的所有对象会发生什么 - 这些对象是否被垃圾收集,或者它们是否以某种方式随进程或应用程序域一起“卸载”?
  • 垃圾收集器是每个应用程序的一部分(在同一进程中运行)还是独立的?

最佳答案

我鼓励您亲自尝试一下。例如:

using System;

class Program {
static void Main(string[] args) {
var t = new Test();
throw new Exception("kaboom");
}
}
class Test {
~Test() { Console.WriteLine("finalizer called"); }
}

在命令提示符下运行此命令,以便您可以看到最后的喘息。首先将 throw 语句注释掉。

与 Windows 中任何未处理的异常一样,Windows 提供的默认异常筛选器会调用由 WerFault.exe 显示的 Windows 错误报告对话框。如果单击“关闭程序”,WerFault 将使用 TerminateProcess() 来终止该程序。这是一个快速结束,没有机会运行终结器线程,就像程序正常退出时那样。

Windows 然后负责清理弹片。它会自动关闭您的程序可能已打开但没有机会在终结器中关闭的任何操作系统句柄。文件是这里更棘手的问题,它们的缓冲区不会被刷新,您很容易在磁盘上得到部分写入的文件。

关于c# - 析构函数 - 如果应用程序崩溃,它会被调用吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12383005/

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