库代码中的一次性资源

时间:2012-05-04 08:57:42

标签: c# .net theory idisposable

想象一下,你正在写一个图书馆。比如说,这个库将用于24/7服务器应用程序。有一些无人值守的资源,包含在您的公共API中,因此您实现了Disposable模式(您甚至可以实现终结器)

通常,您将使用using语句释放非托管资源。但是你只是在编写一个库,而不是最终的应用程序。如果其他程序员“忘记”拨打Dispose()怎么办?您将在lib中获得资源泄漏! 我们可以依赖终结器,但不能保证终结器永远都是called。 那么,有没有办法保证以某种方式释放非托管资源?有什么想法吗?

2 个答案:

答案 0 :(得分:2)

除了记录您的课程外,没有其他解决方案。在您的文档中明确写出您的类的使用方式(即它们应尽可能早地处理,可能使用using,或明确调用Dispose)。

如果您的消费者没有妥善处理其物品,那么如果人们在野外捣毁垃圾,工业企业应对污染负责,您就不会对内存泄漏负责。

答案 1 :(得分:1)

您可能希望服务器应用程序启用代码分析规则CA2213: Disposable fields should be disposed

否则我不知道是否有办法保证他们调用你的Dispose()方法。