【发布时间】:2020-06-30 19:37:06
【问题描述】:
此代码大约需要 2.5 秒才能关闭我的应用程序:
Environment.Exit(0);
但是,以下解决方案只需要不到半秒的时间:
Application.Current.Shutdown();
这种巨大的时间差异是如何产生的?
【问题讨论】:
-
您是否进行了基准测试来验证这一点?这是执行此任务数百万次...
-
验证什么?时差非常明显,这两个选项我都尝试了好几次,代码中没有做任何改动。
-
Exit 会立即终止应用程序,即使其他线程正在运行。如果在应用程序入口点调用 return 语句,它会导致应用程序仅在所有前台线程都终止后才终止。 -- 如果从 try 或 catch 块调用 Exit,则任何 finally 块中的代码都不会执行。如果使用了 return 语句,finally 块中的代码就会执行。如果在受约束的执行区域 (CER) 中的代码运行时调用 Exit,则 CER 将不会完成执行。如果使用了 return 语句,则 CER 完成执行。
-
2 秒的差异听起来像 the finalizer timeout... 你的代码有终结器吗? (例如,
~TypeName(),以前称为“析构函数”。)