额外列表<>记忆中的物体

时间:2014-11-09 14:34:49

标签: c# list memory

考虑这个简单的代码:

class Program
{
    static List<Data> listData = new List<Data>();
    static void Main(string[] args)
    {
        for (int i = 0; i < 5; i++)
        {
            Data newData = new Data();
            newData.num1 = i;
            newData.num2 = i * 5;
            listData.Add(newData);
        }
        Console.ReadLine();
    }
}

class Data
{
    public int num1 { get; set; }
    public int num2 { get; set; }
}

出于某种原因,在为此代码分析内存时,它显示内存中有 2 Data []对象(我假设是listData对象): dotMemory 4 ss 任何人都可以解释原因吗?

2 个答案:

答案 0 :(得分:3)

不,你内存中没有额外的List<Data>,你有两个Data[]阵列。哪个是List&lt;&gt;的基础存储?你创建的对象。

列表与LT;&GT;从一个空数组开始,第一个Add()调用创建一个可以容纳4个元素的Data []数组。在第五次Add()调用中用完了,它现在创建一个Data []数组,它的大小加倍,它可以存储8个元素。你的内存分析器仍然看到数据[]数组是垃圾,GC还没有运行。

您可以使用Capacity属性对其进行优化。在this post中有更多详细信息。

答案 1 :(得分:2)

我认为你可以依靠垃圾收集器来完成它的工作......不要担心它 (我没有足够的声誉将其作为评论发布)