清单是否清除删除先前包含的对象

时间:2014-11-03 13:28:09

标签: c# .net list

想象我有:

List<MyObject> MyList = new List<MyObject>();
MyObject obj1 = new MyObject();
MyObject obj2 = new MyObject();
MyList.Add(obj1);
MyList.Add(obj2);

是否

MyList.Clear();

删除实例化的对象:&#39; obj1&#39;,&#39; obj2&#39; ?或者它们是否保留在内存中,但列表现在是空的?

3 个答案:

答案 0 :(得分:0)

clear功能只清除列表。 obj1obj2不会是null。 您可以通过打印对象轻松检查它:

Console.WriteLine(obj1);

答案 1 :(得分:0)

  

删除实例化的:'obj1','obj2'?或者它们是否保留在内存中,但列表现在是空的?

它们保存在内存中,直到没有对象的引用,GC将其删除。在这种情况下,只有您的列表是空的。您可以通过在调用Clear方法后尝试访问对象的成员来轻松地对此进行测试。

答案 2 :(得分:0)

只要你有一个对象的引用,你可以在你的代码中访问它,它就在内存中,垃圾收集器没有收集它。所以答案是不,它们被保存在记忆中

您可以阅读有关垃圾收集here的更多信息。

如果代码是这样的

List<MyObject> MyList = new List<MyObject>();
MyList.Add(new MyObject());
MyList.Add(new MyObject());

然后当你调用MyList.Clear()时,你没有引用你创建的MyObject,所以垃圾收集器会收集它们并在下一次运行时将它们从内存中删除。 如果要在清除列表后从内存中删除obj1obj2,则应使用

obj1 = null;
obj2 = null;
GC.Collect()

但要注意强制垃圾收集的后果。