首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >内存中的额外List<>对象

内存中的额外List<>对象
EN

Stack Overflow用户
提问于 2014-11-09 14:34:49
回答 2查看 98关注 0票数 0

考虑一下这个简单的代码:

代码语言:javascript
运行
复制
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对象):

有人能解释原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-09 14:59:59

不,内存中没有额外的List<Data>,而是有两个Data[]数组。它们是您创建的List<>对象的底层存储。

List<>从一个空数组开始,第一个Add()调用创建一个可以容纳4个元素的Data[]数组。它在第五个Add()调用中运行,它现在创建一个Data[]数组,该数组的大小是原来的两倍,它可以存储8个元素。您的内存分析器仍然可以看到垃圾的Data[]数组,GC还没有运行。

您可以使用容量属性对此进行优化。在this post中有更多的细节。

票数 3
EN

Stack Overflow用户

发布于 2014-11-09 14:48:35

我想你可以指望垃圾收集器来完成它的工作..。别担心(我没有足够的声誉来发表评论)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26829299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档