微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/csharp/97831.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐