查看以下代码:
class Class1
{
private List<object> _listOfAnything;
~Class1() //is it worth it?
{
//set null to all items of the list
if (_listOfAnything != null)
{
if (_listOfAnything.Count > 0)
{
for (int i = 0; i < _listOfAnything.Count; i++)
{
_listOfAnything[i] = null;
}
//clear list
_listOfAnything.Clear();
}
//set list to null
_listOfAnything = null;
}
}
public void DoSomething()
{
//create list and add items to it
_listOfAnything = new List<object>();
_listOfAnything.Add(new object());
_listOfAnything.Add(new object());
_listOfAnything.Add(new object());
//do something
}
}
class Class2
{
private void DoSomething()
{
//instanciate Class1
Class1 class1 = new Class1();
//do something with Class1
class1.DoSomething();
//set null to Class1
class1 = null; //do I need to set it no null?
}
}
我是否真的需要将Class1
设置为空并清除Class1._listOfAnything
?
答案 0 :(得分:4)
没有必要清除垃圾收集器将要处理的列表。
答案 1 :(得分:1)
这是一种浪费,并且Garbage Collector
无法完成任何事情。
但是,假设在Class1
的实例被删除之前,您需要在每个项目上发生一些事情,请考虑查看IDisposable。请记住,只有在GC处理实例时才会调用析构函数。不是在实例失去范围时。
答案 2 :(得分:-1)
我不相信这是必需的,因为List对象一旦超出范围就会被销毁,而.Net编译器GC(垃圾收集器)会清除内存。