正确处理Singleton IDisposable对象

Dan*_*Dan 10 .net c#

场景:

应用程序实例化实现的类的单个实例IDisposable.该实例通过静态成员公开,使其可供应用程序的所有部分访问.单个实例需要在应用程序的生命周期内保持活动状态.

Dispose在应用程序关闭并且进程终止之前调用该方法有多重要?

我一直认为,在大多数这种情况下,没有必要打电话,Dispose因为过程的终止自然会清理资源.我错了吗?

Bry*_*sby 7

如果"您的应用程序关闭"意味着该过程正在终止,那么您在技术上不需要做任何事情.您的流程正在终止,操作系统将释放这些资源.

我想他们可能是一些模糊的角落案例,其中一些组件可以创建某种类型的文件或其他资源,如果Dispose没有被调用,即使您的进程终止,也不一定要清理它.

我想举一个例子,虽然这是一个奇怪的角落案例.假设您在代码中引用并使用组件.创建和使用它时,它会在您的计算机上创建一个2GB的文件.现在让我们更进一步,并说这个组件,实际上关闭文件句柄本身在它使用期间访问这个2GB文件,由于一个错误或只是糟糕的设计.现在Dispose,此对象上的方法会清除此文件,但是没有详细记录.基本上,错过Dispose对此的调用将在机器上留下一个文件.这绝对是一个极端情况,并不会导致你的机器"泄漏"任何东西,但你确实有一个2GB文件坐在那里.

话虽这么说 - 最好的做法是Dispose在确定性地完成资源时打电话.您可以在Singleton上调用一个方法 - 比方说Cleanup()- 可以在关闭时运行.