美文网首页
大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的内存分配优化

    最近要帮硬件的同事处理一点信号数据,因为要做成一个可显示图标的简单工具,这里选择使用C#。原始数据大概有2000w...

  • iOS 性能优化 - Allocations分析内存分配

    iOS 性能优化 - Allocations分析内存分配 iOS 性能优化 - Allocations分析内存分配

  • Redis内存优化

    Redis内存优化 1.内存消耗 1.1内存使用统计 属性名属性说明used_memoryRedis 分配器分配的...

  • android知识积累 - 收藏集 - 掘金

    Android 性能优化之内存泄漏检测以及内存优化(上) - 掘金在 Java 中,内存的分配是由程序完成的,而内...

  • 内存优化

    一、内存优化的目的 Android系统给每个app分配的内存是有限的,各个厂商分配的内存大小自己定制,可在清单文件...

  • ElasticSearch优化系列三:机器设置(内存)

    heap参数设置优化 命令行修改 xmx-JVM最大允许分配的堆内存,按需分配 xms-JVM初始分配的堆内存 此...

  • android性能评测与优化-内存

    内存性能分析及优化的意义 Overview of memory management内存管理介绍 OOM 系统分配...

  • MySQL Server优化

    1、MySQL内存管理及优化 1.1、内存优化原则 (1)将尽量多的内存分配给MySQL做缓存,但要给操作系统和其...

  • MySQL内存分配优化

    0 - 概述 系统的物理内存是有限的,而对内存的需求是变化的, 程序的动态性越强,内存管理就越重要,选择合适的内存...

  • Allocations

    Allocations可以检测内存分配情况,可查看某个对象分配的内存占用百分比,从而进行优化; 选择Created...

网友评论

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

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