gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:45:14 24 4
gpt4 key购买 nike

我有一个“永远”存在于应用程序中的 IDiposable 对象。在我的例子中是 SemaphoreSlim,但这个问题实际上适用于任何可以处置的对象。

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

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

我想避免但不确定后果。

最佳答案

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

关于c# - 我是否需要处理与应用程序本身具有相同生命周期的 IDisposable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56132457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com