use*_*473 2 c# garbage-collection idisposable
假设我有一些对象C可以保存对自身实例的引用,也可以实现IDisposable.如何处理对其他实例的引用C?我应该递归调用他们的dispose方法还是我应该将它们设置为null?换句话说,首选哪种型号?
模型1:递归处置
public class C : IDisposable
{
public List<C> subItems = new List<C>();
public void Dispose()
{
foreach (C subItem in subItems)
subItem.Dispose();
// Dispose other stuff
}
}
Run Code Online (Sandbox Code Playgroud)
模型2:通过设置等于处理null
public class C : IDisposable
{
public List<C> subItems = new List<C>();
public void Dispose()
{
subItems = null;
// Dispose other stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我应该递归调用他们的处置方法
是.
但只有当C实际需要时IDisposable,这在您的代码中并不明显.它指的是同一个类的实例是不相关的,在所有拥有的IDisposable对象上调用Dispose().
如果这是尝试"帮助"垃圾收集器,那么停止它并且什么都不做.
| 归档时间: |
|
| 查看次数: |
827 次 |
| 最近记录: |