这几天在写项目的过程中,发现在自身计算机仍有很大内存空间时,却无法创建一个大容量的数组或者位图。
后来经过查阅资料和测试,这是因为.net的内存管理导致的。
https://www.cnblogs.com/xinaixia/p/5767955.html
由于楼主的程序在运行过程中产生了大量的超过85000字节的对象,于是.net把它们规划到了大对象堆(large object heap,LOH)。然而在大对象堆中,.net出于性能考虑,在设计中里面的对象的位置不会被压缩(移动)在一起,所以当大对象堆中的对象纷纷被删除后,产生了了大量的碎片空间,以至于后来想申请几百M的数组时找不到一个连续性空间,最终就引发了异常。
解决方案是在程序首次运行后就需要欲开辟你在后来需要用到的数组空间,让他们连成一片,这样可以尽可能减少碎片化内存带来的影响。