【发布时间】:2009-04-03 13:03:30
【问题描述】:
我有一个 .NET C#/C++ 应用程序,它在线程中使用对 exit(0)(来自 <stdlib.h>)的调用来终止。
奇怪的是,在某些情况下,托管对象的终结器在调用 exit 之后立即被调用,而在其他情况下,它们根本不会被调用。
情况非常确定 - 应用在其生命周期内从外部插件 dll(用非托管 C 编写)调用一些方法。
如果我使用 dll A,则始终调用终结器。
如果我使用 dll B,则永远不会调用终结器。
在调用 exit(0) 的情况下,终结器的预期行为是什么? (如果有任何预期的 - 和记录的 - 行为)
对外部 dll 的调用能否更改一些可能影响进程终止方式的全局设置?
【问题讨论】:
-
您可能应该使用 IDisposable 模式而不是终结器。
-
我也想过,第一次看到代码的时候,但邪恶已经存在,在代码库中……
标签: c# .net c++ finalizer object-lifetime