场景:
应用程序实例化实现了 IDisposable
的类的单个实例。该实例通过静态成员公开,使其可供应用程序的所有部分访问。单个实例需要在应用程序的生命周期内保持事件状态。
问题
在应用程序关闭和进程终止之前调用 Dispose
方法有多重要?
我一直认为在大多数像这样的场景中,没有必要调用Dispose
,因为进程的终止自然会清理资源。我错了吗?
最佳答案
如果“您的应用程序关闭”是指进程正在终止,那么您技术上不需要做任何事情。您的进程正在终止,操作系统将释放这些资源。
我想它们可能是一些模糊的极端情况,其中某些组件可能会创建某种类型的文件或其他资源,如果未调用 Dispose
,则不一定会被清理,即使您进程终止。
我想举一个例子,尽管这是一个奇怪的极端情况。假设您在代码中引用并使用了一个组件。当您创建和使用它时,它会在您的机器上创建一个 2GB 的文件。现在让我们更进一步,说这个组件实际上关闭了文件句柄本身访问这个 2GB 文件在它使用期间的某个时候,由于错误或只是糟糕的设计。现在,此对象上的 Dispose
方法清理了此文件,但没有详细记录。本质上,缺少对此的 Dispose
调用将在机器上留下一个文件。这绝对是一个极端情况,不会导致您的机器“泄漏”任何东西,但您确实有一个 2GB 的文件就在那里。
话虽这么说 - 最佳做法是在确定性地完成资源处理后调用 Dispose
。您可以在 Singleton 上调用一个方法 - 让我们说 Cleanup()
- 它可以在您关闭时运行。
关于c# - 正确处理单例 IDisposable 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12594205/