最近,我在研究一些关于object not disposed的棘手bug。
我在代码中发现了一些模式。据报道,一些m_foo没有被释放,而SomeClass的所有实例似乎都已经被释放了。
public class SomeClass: IDisposable
{
void Dispose()
{
if (m_foo != null)
{
m_foo.Dispose();
}
if (m_bar != null)
{
m_bar.Dispose();
}
}
private Foo m_foo;
private Bar m_bar;
}
我怀疑Foo.Dispose可能会抛出异常,因此不会执行以下代码,因此不会释放m_bar。
因为Foo/Bar可能来自第三方,所以不能保证不抛出异常。
如果只使用try-catch包装所有Dispose调用,代码将变得笨拙。
处理此问题的最佳实践是什么?
https://stackoverflow.com/questions/1030455
复制相似问题