我正在使用C#编写一个分析应用程序,需要处理大量的内存。我使用ANTS Memory Profiler 7.4优化我的内存管理。在这个过程中,我意识到我使用(并且需要)的所有double[,]数组都被放置在LOH上,尽管其中最大的数组只有约24,000字节。据我所知,对象不应该在85,000字节之前放置在那里。问题是,由于我有数千个这些double[,]数组的实例,因此我有很多内存碎片(我的总内存使用量的约25%是无法使用的空闲内存)。其中一些存储在LOH上的数组甚至只有1,036字节大小。问题是,有时我必须执行更大的分析,然后由于LOH碎片而导致内存大量丢失,最终出现了内存不足异常。
请问,为什么会发生这种情况,尽管它根据定义不应该是一个大对象?
我的应用程序的内存快照如下图所示: 即使是这样小的double数组(数组中仅有70个元素),也受到这种情况的影响:
请问,为什么会发生这种情况,尽管它根据定义不应该是一个大对象?
我的应用程序的内存快照如下图所示: 即使是这样小的double数组(数组中仅有70个元素),也受到这种情况的影响: