c#list产生的gc

当执行集合添加时,如add时,如果集合长度未指定,list会自动指定长度,以及分配内存。
  List<A> TestAList = new List<A>() { };
        for (int i = 0; i < 10000; i++)
        {
            TestAList.Add(new A());
        }
此时list有256.4k,对象占用156.3k。
当指定list长度时,可以节省些内存开销:如:
  List<A> TestAList = new List<A>(10000) { };
        for (int i = 0; i < 10000; i++)
        {
            TestAList.Add(new A());
        }
此时list只有78.2k的gc,10000个a对象的gc有156.3k。
通过数据可以得出结论:未指定list长度时,每次add时会检查是否能放下对象,如果放不下时会自动再分配更多内存,但是这个内存往往会变得越来越大(怀疑符合是指数曲线)。所以对于已知list的长度时,可以指定list的长度。这样他就不会占用过多的内存。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值