想象一下你正在编写一个库。比如说,这个库将用于 24/7 服务器应用程序。有一些未管理的资源,包装在你的公共 API 中,所以你实现 Disposable 模式(你甚至可以实现终结器)
通常,您会使用using
语句来释放非托管资源。但是您只是在编写一个库,而不是最终的应用程序。如果另一个程序员“忘记”打电话Dispose()
怎么办?您将在您的库中获得资源泄漏!我们可以依赖终结器,但不能保证终结器会被调用。那么,有没有办法保证以某种方式释放非托管资源?有任何想法吗?
想象一下你正在编写一个库。比如说,这个库将用于 24/7 服务器应用程序。有一些未管理的资源,包装在你的公共 API 中,所以你实现 Disposable 模式(你甚至可以实现终结器)
通常,您会使用using
语句来释放非托管资源。但是您只是在编写一个库,而不是最终的应用程序。如果另一个程序员“忘记”打电话Dispose()
怎么办?您将在您的库中获得资源泄漏!我们可以依赖终结器,但不能保证终结器会被调用。那么,有没有办法保证以某种方式释放非托管资源?有任何想法吗?
除了记录您的课程之外,没有其他解决方案。在你的文档中明确地写出你的类是如何被使用的(即它们应该在尽可能早的时候被释放,可能使用using
,或者显式调用Dispose
)。
如果您的消费者没有正确处理其对象,那么您无需为内存泄漏负责,就像人们在野外丢弃垃圾时工业部门对污染负责一样。
您可能希望服务器应用程序具有代码分析规则CA2213: Disposable fields should be dispose启用。
否则我不知道是否有办法保证他们调用你的 Dispose() 方法。