C# 列表和内存

Chr*_*ris 3 c# memory

我是 C# 新手,想知道在 list1 = null; 之后 list1 是否真的从内存中删除。

List<string> list1 = new List<string>()
{
    "carrot",
    "fox",
    "explorer"
};
List<string> list2 = new List<string>();
list2.Add(list1[0]);
list2.Add(list1[1]);
list2.Add(list1[2]);

list1 = null;
Run Code Online (Sandbox Code Playgroud)

此代码仅用于文档,在我的实际情况中,list1 对象非常大,我需要将其从内存中删除,并仅继续使用 list2,它是原始 list1 的一小部分。

我假设 list1[0] 和 list2[0] 引用内存中的同一对象,直到我用新值更新 list2[0] ...这是正确的吗?

PVi*_*itt 5

有几个问题。让我尝试分别回答它们:

  1. 当对list1的引用设置为null时,list1是否会从内存中删除?

    不,当垃圾收集器下次清理堆时,该列表将从内存中删除。何时进行清理取决于垃圾收集器。

  2. list1 和 list2 是否引用相同的对象?

    是的,他们是。

所以总而言之,这意味着您不必处理内存管理。这是由垃圾收集器完成的。而且垃圾收集器足够聪明,知道何时必须收集孤立对象。所以不要试图比 GC 做得更好。几乎在所有情况下,情况都在变得更糟。