查看以下代码:
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
吗?
没有必要清除垃圾回收器将处理它的列表。
释放列表的最佳方式
这是一种
浪费,没有完成Garbage Collector
做不到的事情。
但是,假设您需要在擦除Class1
实例之前对每个项目进行一些操作,请考虑查看 IDisposable。 请记住,析构函数仅在 GC 处理实例时被调用。当实例失去范围时不会。
我认为不需要这样做,因为一旦超出范围,List对象就会被销毁,并且.Net编译器GC(垃圾收集器)会清除内存。