【问题标题】:Why is solution 1 to close my application slower than solution 2?为什么关闭我的应用程序的解决方案 1 比解决方案 2 慢?
【发布时间】: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(),以前称为“析构函数”。)

标签: c# .net .net-4.8


【解决方案1】:

如果没有指标,我将尝试一下。根据退出文档:

退出需要调用者有权调用非托管代码。

我怀疑执行非托管代码的开销是您浪费时间的地方。

Exit Doc

【讨论】:

  • 文档中还有其他一些原因,包括不使用它的原因..
  • @TaW 同意。我在脑海中叫出了大的,但 OP 应该检查整个文档。
猜你喜欢
  • 2021-06-23
  • 2021-10-26
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 2010-09-14
相关资源
最近更新 更多