如果我创建一个列表的递归列表:
class myList
{
List<myList> childLists;
List<string> things;
//...
}
List<myList> tempList = new List<myList>();
然后调用tempList.Clear(),它会破坏内存中的所有childLists,还是应该创建一个递归方法来首先清除所有的childLists?
答案 0 :(得分:9)
如果子列表中不存在其他引用,则它们将正常进行垃圾回收。诀窍是要注意对子项的任何悬空引用(数据绑定特别容易在注意后被忽略)。
答案 1 :(得分:4)
您似乎来自C ++背景。
阅读.NET's Garbage Collection应该清除很多事情。
在您的情况下,您不需要“销毁”所有子列表。实际上,您甚至无法以正常的良好实践.NET方式自行销毁或处置通用List对象。如果您不再希望使用它,那么只需删除对它的所有引用。当对象看起来合适时,对象的实际销毁将由垃圾收集器(也就是GC)完成。
GC也非常智能,它会检测圆形参考和a-&gt; b-&gt; c-&gt; d对象树和大多数事情你可以提出并正确清理整个对象图。所以你不需要创建那个递归清理程序。
但请注意GC的行为是不确定的,即你不知道什么时候会发生实际的“清理”,所以如果你的列表包含一些应该立即释放的重要资源,即文件句柄,数据库连接,那么你应该明确地“处理”它,正如@lassevk推荐的那样。
答案 2 :(得分:1)
您无需清除子列表。
您唯一需要做的就是如果列表中的对象实现了IDisposable,那么您应该遍历这些对象并在清除列表之前调用.Dispose()方法。
答案 3 :(得分:0)