c# – 在Singleton上使用Dispose来清理资源

前端之家收集整理的这篇文章主要介绍了c# – 在Singleton上使用Dispose来清理资源前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题可能更多地与语义有关,而不是与IDisposable的实际使用有关.我正在开发一个单例类,负责管理在执行应用程序期间创建的数据库实例.应用程序关闭时,应删除数据库.

现在我将删除操作由应用程序在关闭调用的单例的Cleanup()方法处理.当我为Cleanup()编写文档时,让我感到震惊的是我正在描述应该使用Dispose()方法来清理资源.我原本没有实现IDisposable因为它在我的单身中看起来不合适,因为我不想要任何东西来处理单身人士本身.目前还没有,但是将来可能会出现这样一个原因,即可能会调用此Cleanup(),但单例仍然需要存在.我想我可以包含GC.SuppressFinalize(this);在Dispose方法中使这个可行.

因此,我的问题是多方面的:

1)在单例上实现IDisposable从根本上是一个坏主意吗?

2)我只是通过使用Cleanup()而不是Dispose()来混合语义,因为我正在处理资源我真的应该使用dispose吗?

3)将使用GC.SuppressFinalize(this)实现’Dispose()’;这样我的单身实际上并没有被破坏,因为我希望它在调用清理数据库后生存.

解决方法

简而言之,如果你有一个单身人士并且你打电话处理.任何对象在此之后尝试使用它时,将使用处于已处置状态的对象.

现在将它放入,并在应用程序完成后处理对象,并不一定是坏事.当你打电话时,你必须要小心.如果您真的关心清理并且只有一个引用它,那么您可以将清理代码放在对象终结器~WithClass中,这样它只会被调用.Net确定它不再需要(当应用程序关闭,如果它是一个真正的单身人士).

Am I just mixing semantics here by
having a Cleanup() instead of a
Dispose() and since I’m disposing
resources I really should use a
dispose?

是的,这只是语义. Dispose是显示在程序完成对象后需要清除的东西的标准.

Will implementing ‘Dispose()’ with
GC.SuppressFinalize(this); make it so
my singleton is not actually destroyed
in the case I want it to live after a
call to clean-up the database.

不,这意味着当你调用dispose方法时,垃圾收集器不会调用对象的自定义终结器.

原文链接:https://www.f2er.com/csharp/97831.html

猜你在找的C#相关文章