我是否需要处理与应用程序本身具有相同生命周期的 IDisposable?

Do I need to dispose IDisposable that have the same lifetime as the application itself?

我有一个 IDiposable 对象存在于应用程序中 "forever"。在我的例子中是 SemaphoreSlim,但这个问题确实适用于任何可以处理的对象。

我确信只要应用程序运行我就需要一个对象。所以问题是:当进程结束时,我真的需要确保它被处置或所有非托管资源都被释放吗? (Windows 和 Linux 如果重要的话)。

处理的问题是我的信号量在堆栈深处,理论上这意味着我的整个对象堆栈必须实现 IDisposable 只是因为某处有一个真正不需要获取的信号量处置。

我想避免但不确定后果。

I have an IDiposable object that lives "forever" in the application

好吧,如果它必须活到应用程序生命周期那么处理的问题在哪里?而是在您的应用程序结束或回收时 运行 时间释放它。

all unmanaged resources are freed anyway when the process ends?

是的,一旦您的应用程序结束(进程结束),它们就会被释放,但在那之前资源会一直占用内存(但这看起来像是您的要求)

所有 OS 级对象都随着进程终止而释放。 OS 保证了这一点,并且对 Windows 和 Linux 操作系统都是如此。此外,IDispisable 具有正确实施的处置模式具有故障安全机制,可确保在完成过程中回收非托管资源。然而,这个过程有一些限制(特别是终结器在有限的时间内完成)。因此,在最坏的情况下,您可以确定非托管资源不会比您的流程寿命更长。让它们无人看管当然不是最佳做法,因为在系统忽略资源回收的情况下,它可能导致资源和内存泄漏,但作为生命周期等于应用程序生命周期的单个资源的例外情况,它是可以接受的。