我正在用 C# 编写一个必须处理大量内存的分析应用程序。我使用 ANTS Memory Profiler 7.4 来优化我的内存管理。这样做时,我意识到我使用的所有 double[,] 数组(并且我需要它们)都放在 LOH 上,尽管这些数组中最大的大约是 24.000 字节。据我所知,对象不应该放在 85.000 字节之前。现在的问题是,由于我有大约数千个这些 double[,] 数组的实例,我有很多内存碎片(我的总内存使用量中约有 25% 是我无法使用的空闲内存)。其中一些存储在 LOH 上的数组甚至只有 1.036 字节大小。问题是,有时我必须执行更大规模的分析,然后由于 LOH 碎片导致大量内存丢失,最终导致内存不足异常。
有谁知道为什么会发生这种情况,尽管根据定义它不应该是一个大对象?