我是否需要清除不再使用的类的List属性?

时间:2014-01-08 18:59:25

标签: c# .net

查看以下代码:

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

3 个答案:

答案 0 :(得分:4)

没有必要清除垃圾收集器将要处理的列表。

Best way to dispose a list

答案 1 :(得分:1)

这是一种浪费,并且Garbage Collector无法完成任何事情。

但是,假设在Class1的实例被删除之前,您需要在每个项目上发生一些事情,请考虑查看IDisposable。请记住,只有在GC处理实例时才会调用析构函数。不是在实例失去范围时。

答案 2 :(得分:-1)

我不相信这是必需的,因为List对象一旦超出范围就会被销毁,而.Net编译器GC(垃圾收集器)会清除内存。