我是否应该打扰处理共享进程生命周期的对象?

我知道实现IDisposable所有对象应该在不再需要时立即处理,以释放其非托管资源使用的内存。

我的问题涉及我知道的事实,直到主机进程本身终止为止。 如果我处理它们会不会有任何区别? 当进程死亡时,是否存在释放内存的可能性? GDI对象怎么样? 即使没有处理过程,GDI句柄是否会在进程终止时被释放?

我完全明白,无论如何处理所有物体都是一种好习惯。 纯粹是出于好奇而问我。

它取决于所讨论的对象(资源)。

当进程终止所有非托管内存时,即使关联的终结器无法运行,也将释放文件句柄和其他OS资源。

但我不太确定数据库句柄,命名互斥体等。

因此,在您可以认为不安全地调用Dispose之前,您必须了解资源类型以及它与流程的关系。 更容易从一般原则中调用Dispose()。

但这是一个理论论证,大多数类都会使用SafeHandle : CriticalFinalizerObject 。 所以我认为这不是一个真正的实际问题。

根据设计 ,IDisposable可用于允许程序尽早释放非托管资源,而不是终结器可以完成。 它在相当不可预测的时间运行,通常在执行垃圾收集时更 。 您无法预测何时发生这种情况。

处理程序退出是没有意义的,终结器可以保证在卸载AppDomain之前运行并且进程关闭。

据说,有一些IDisposable滥用,实际上希望你称之为代码。 但这通常基于using语句,因此不太可能遇到这种情况。