c# - 这个变量在使用后会被释放吗?

标签 c# .net variables clr local

我只是不知道某个方法中使用的变量在该方法执行完成后去了哪里,请看下面的代码片段:

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

我的问题; GetConditionedObjectList 方法中定义的变量 myObjList 是否会在 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;
    }

最佳答案

C# 有垃圾回收功能。对象在堆上创建,并且仅当该对象不再有对其的引用时才被收集。

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

如果“处置”是指“销毁”或“从内存中删除”,那么垃圾收集器会为您执行此操作;您需要做的就是删除对该对象的引用。例如,您可以在调用该函数后将 conditionedObjList 设置为 null。然后 GC 就可以自由地拾取未引用的对象。请注意,这不是立即发生的; GC 仅定期运行以提高效率。

关于c# - 这个变量在使用后会被释放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5386890/

相关文章:

javascript - 变量提升示例

C++ 临时变量生命周期

C# WPF MVVM TextBox 值不改变

.net - CORBA IIOPNet 和 OmniORBpy,带有值类型参数的远程方法调用问题

c# - 是否可以在 IE 中使用 "autopopulate"字段?

.net - 一个或多个包与 .NETStandard 不兼容,版本=v1.5

.net - Azure 应用程序设置中的 Key Vault 设置,无需代码

variables - 在 DOS 中比较两个数字不起作用

c# - 关于返回的问题?

c# - 在 C# 中使用数组的困惑