加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:13:07 所属栏目:百科 来源:网络整理
导读:我的问题可能更多地与语义有关,而不是与IDisposable的实际使用有关.我正在开发一个单例类,负责管理在执行应用程序期间创建的数据库实例.应用程序关闭时,应删除此数据库. 现在我将删除操作由应用程序在关闭时调用的单例的Cleanup()方法处理.当我为Cleanup()编
我的问题可能更多地与语义有关,而不是与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方法时,垃圾收集器不会调用对象的自定义终结器.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读