我只是不知道方法执行完成后某些方法中使用的变量已经消失,请参阅下面的代码片段:
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;
}
答案 0 :(得分:1)
当您返回对它的引用时,它不会被处理。
如果在函数返回后没有对它进行引用,那么它只会在本地函数中使用它,因此GC可以自由地收集它。
BTW List<T>
没有实现IDisposable,因此不需要在代码中处理它。
答案 1 :(得分:1)
C#有垃圾收集。对象是在堆上创建的,只有在对象没有对它的引用时才会收集。
myObjList
只将引用存储到堆上的实际对象中;当您返回此引用并将其存储在变量中时,您可以保证垃圾收集器(GC)不会将其读取。
如果被“处置”意味着“被破坏”或“从记忆中移除”,那么垃圾收集器会为你做这件事;您需要做的就是删除对象的引用。例如,您可以在调用函数后将conditionedObjList
设置为null
。然后GC可以自由选择未引用的对象。请注意,这不是立即的; GC仅定期运行以提高效率。
答案 2 :(得分:1)
IDisposable
- 所以我们根本不需要处理它。