为什么代码分析器建议处理IDisposable字段?
这个问题在这里已经有了答案:
有2个理由实现IDispose:
1.处理非托管资源 - 这是关于清理的内容 (非托管资源)
2.能够控制什么时候管理资源被释放 - 这是关于什么时候事情被清理 。
一次性使用证明文件非常重视1,但实际上大多数实施文件约为2。
在你的例子中就是这种情况 - 你所拥有的资源被托管(通过包装非托管位图句柄的托管Bitmap类)。 你可以将它置于你的dispose中,以使你的类的用户能够控制何时释放位图(不是如果它被释放 - 最终,当GC感觉像它时)。
也许会。 但当? 这个类不能可靠地使用。 如果我按顺序创建10.000,则10.000个未配置的位图将在内存中,等待惰性垃圾收集器调用终结器(希望)调用Dispose
。 也许今天。 明天吧。 但作为开发人员,我无法控制这一点。 如果你正确地实现了IDisposable
,我可以简单地在它们中的每一个周围都有一个using
块,并且我永远不会使用比单个Bitmap
资源更多的资源。
上一篇: Why code analyzers recommend to dispose IDisposable fields?
下一篇: Why should we call SuppressFinalize when we don't have a destructor