编程语言
首页 > 编程语言> > c# – .NET – 终结器并退出(0)

c# – .NET – 终结器并退出(0)

作者:互联网

我有一个.NET C#/ C应用程序,它使用一个线程中的exit(0)(来自< stdlib.h>)来终止.

奇怪的是,在某些情况下,托管对象的终结器在调用退出后立即被调用,而在其他情况下,它们根本不被调用.

这种情况非常确定 – 应用程序在其生命周期内从外部插件dll(用非托管C编写)调用一些方法.
如果我使用dll A,则始终调用终结器.
如果我使用dll B,则永远不会调用终结器.

在退出(0)调用的情况下,终结器的预期行为是什么? (如果有任何预期的和记录在案的行为)

对外部dll的调用是否会改变一些可能影响进程终止方式的全局设置?

解决方法:

Chris Brumme谈到了在流程关闭期间如何处理终结器:

> http://blogs.msdn.com/cbrumme/archive/2004/02/20/77460.aspx(查看标题为“V1& V1.1 Finalization Guarantees”的部分).

最重要的是,在关机时运行的终结器的保证方式似乎很少,但我不确定DLL可能做些什么导致事情采取不同的行为(也许是一个DLL正在做的事情) DLL_PROCESS_DETACH处理中的一些东西让.NET有机会处理终结器.

本文适用于.NET 1.x – 我不确定.NET 2.0或更高版本中有多少更改.

标签:object-lifetime,finalizer,c,net,c-2
来源: https://codeday.me/bug/20191009/1877321.html