C# 是否清除列表以删除以前包含的对象
想象一下我有:C# 是否清除列表以删除以前包含的对象,c#,.net,list,C#,.net,List,想象一下我有: List<MyObject> MyList = new List<MyObject>(); MyObject obj1 = new MyObject(); MyObject obj2 = new MyObject(); MyList.Add(obj1); MyList.Add(obj2); 是否删除实例化的“obj1”、“obj2”?或者它们保存在内存中,但列表现在是空的?清除功能只需清除列表即可。 obj1和obj2将不为null。 您可以通过打印以下
List<MyObject> MyList = new List<MyObject>();
MyObject obj1 = new MyObject();
MyObject obj2 = new MyObject();
MyList.Add(obj1);
MyList.Add(obj2);
是否删除实例化的“obj1”、“obj2”?或者它们保存在内存中,但列表现在是空的?清除功能只需清除列表即可。
obj1
和obj2
将不为null
。
您可以通过打印以下对象轻松进行检查:
Console.WriteLine(obj1);
是否删除实例化的“obj1”、“obj2”?或者它们被保存在内存中,但列表现在是空的
它们一直保存在内存中,直到没有对对象的引用并且GC删除它们为止。在这种情况下,只有您的列表是空的。您可以通过调用
Clear
方法尝试访问对象的成员来轻松测试这一点。只要您有对象的引用,并且您可以在代码中访问它,它就在内存中,垃圾收集器不会收集它。因此答案是否定的,它们被保存在内存中
您可以阅读有关垃圾收集的更多信息
如果代码是这样的
List<MyObject> MyList = new List<MyObject>();
MyList.Add(new MyObject());
MyList.Add(new MyObject());
但是要注意强制垃圾收集的后果。对象仍然处于活动状态,但列表为空。垃圾收集器(GC)一旦不再引用对象,就会将其删除。我相信这不是java
List<MyObject> MyList = new List<MyObject>();
MyList.Add(new MyObject());
MyList.Add(new MyObject());
obj1 = null;
obj2 = null;
GC.Collect()