这个变量在使用后是否处理?

时间:2011-03-22 04:40:08

标签: c# .net variables clr local

我只是不知道方法执行完成后某些方法中使用的变量已经消失,请参阅下面的代码片段:

    void Foo()
    {
        List<object> conditionedObjList;
        conditionedObjList = GetConditionedObjectList
            (
            new List<object>() { /*there are many unconditioned objects here*/}
            );
    }

我的问题;方法myObjList中定义的变量GetConditionedObjectList将在myObjList返回后处理,还是需要手动处理?

    private List<object> GetConditionedObjectList(List<object> originalObjList)
    {
        List<object> myObjList = new List<object>();
        /*do some selection*/
        myObjList.AddRange(new object[]{/*there are 100 conditioned objects here*/});
        return myObjList;
    }

3 个答案:

答案 0 :(得分:1)

当您返回对它的引用时,它不会被处理

如果在函数返回后没有对它进行引用,那么它只会在本地函数中使用它,因此GC可以自由地收集它。

BTW List<T>没有实现IDisposable,因此不需要在代码中处理它。

答案 1 :(得分:1)

C#有垃圾收集。对象是在堆上创建的,只有在对象没有对它的引用时才会收集。

myObjList只将引用存储到堆上的实际对象中;当您返回此引用并将其存储在变量中时,您可以保证垃圾收集器(GC)不会将其读取。

如果被“处置”意味着“被破坏”或“从记忆中移除”,那么垃圾收集器会为你做这件事;您需要做的就是删除对象的引用。例如,您可以在调用函数后将conditionedObjList设置为null。然后GC可以自由选择未引用的对象。请注意,这不是立即的; GC仅定期运行以提高效率。

答案 2 :(得分:1)

  1. 列表未实现IDisposable - 所以我们根本不需要处理它。
  2. 一旦您没有任何参考,它将被标记为垃圾收集。