美文网首页
大List的内存分配优化

大List的内存分配优化

作者: haikea | 来源:发表于2019-05-25 10:56 被阅读0次

    最近要帮硬件的同事处理一点信号数据,因为要做成一个可显示图标的简单工具,这里选择使用C#。
      原始数据大概有2000w调左右,都是双精度,要将数据转换为byte类型,同时还要统计其分布,计算相关性等等。所以考虑将所有数据都放到一个list中,再将处理完的数据放到另一个list中,经过多步处理,竟然已经生成了多个list(因为每一步的处理数据后面都需要用到所以不方便在同一list中进行复用)。然后调试过程中就报了“需要分配的持续内存不足”的错。
      研究之后发现,list的内存大小,由Capacity控制,当Capacity=4,而要添加第五个元素时,Capacity就会增长一倍变为8,以后每次不够时,Capacity=Capacity2。
    所以说Capacity一直是2的倍数,而比2000w更大,最接近2000w的就是2^25=33554432,如果是double类型,就相当于只需要2000w
    8Byte的内存空间,但是实际上分配的多了1300w*8Byte的内存,就是104M的内存,这就造成了很大的内存浪费。
      解决办法,因为所有的数据处理都是基于2000w数据的,而且处理算法确定,所以处理完有多少条数据也可以计算得出。这样可以在每次实例化list对象时,就定义好Capacity的大小,List<T> list = new List<T>(Capacity),这样只会分配指定Capacity的内存,不会造成浪费。

    相关文章

      网友评论

          本文标题:大List的内存分配优化

          本文链接:https://www.haomeiwen.com/subject/aicmzqtx.html