【发布时间】:2011-07-28 20:35:53
【问题描述】:
在answer I wrote 的 cmets 中,我们讨论了内存泄漏和IDisposable,但我们没有得出任何真正的结论。
处理非托管资源的类可能实现IDisposable。如果忽略这一点,既不调用Dispose,也不将对象包装在using 中——这会导致非托管资源泄露吗?还是在 GC 收集对象时会正确清理?
我们可以假设处理非托管资源的类具有IDisposable的正确实现,包括终结器等。
【问题讨论】:
-
假设事情做得正确可能是一件危险的事情。但即便如此,这也是相关的:stackoverflow.com/questions/6652044/…
-
在很多情况下,无法编写正确的终结器,因为 Finalize 是在不同的线程上调用的,而 Dispose 是在正常调用时调用的。
-
@AresAvatar: +1 事实上,我认为很遗憾微软没有声明所有正确实现的事件都必须提供线程安全的取消订阅方式,因为即使事件订阅者发现他是不再需要(例如,因为对事件感兴趣的实体持有强引用但事件处理程序没有最终确定的对象)他不能取消订阅该事件,除非他知道发布者提供线程安全的取消订阅。
标签: c# .net idisposable