gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 03:06:42 27 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/2514688/

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