【发布时间】:2012-08-01 05:25:02
【问题描述】:
我正在用 C# 编写一个分析应用程序,它必须处理大量内存。我使用 ANTS Memory Profiler 7.4 来优化我的内存管理。这样做时,我意识到我使用的所有 double[,] 数组(并且我需要它们)都放在 LOH 上,尽管这些数组中最大的大约是 24.000 字节。据我所知,对象不应该放在 85.000 字节之前。现在的问题是,由于我有大约数千个这些 double[,] 数组的实例,我有很多内存碎片(我的总内存使用量中约有 25% 是我无法使用的空闲内存)。其中一些存储在 LOH 上的数组甚至只有 1.036 字节大小。问题是,有时我必须执行更大规模的分析,然后由于 LOH 碎片导致大量内存丢失,最终导致内存不足异常。
有谁知道为什么会发生这种情况,尽管根据定义它不应该是一个大对象?
【问题讨论】:
-
看看this answer!
-
我看到了,但首先我在这里不使用字符串,而且关于双数组的答案也不适合我的问题,因为我在 LOH 上的许多双 [,] 数组甚至没有 6项目。所以这真的让我一无所知。但感谢您的回答。我之前已经看过那个帖子,但它并没有完全解决我的问题。
标签: c# memory-management out-of-memory large-object-heap