.NET LOH压缩

时间:2016-10-27 03:21:04

标签: c# .net memory-management garbage-collection

我一直想知道为什么在以下代码之后GC无法恢复内存?

背景: 我正在使用的应用程序使用大量数组并且内存增长> 1GiB,其中内存使用量应该小得多,因为在执行操作后立即丢弃使用过的数组(类似于这种情况)。

{
    Random r = new Random();
    byte[] arr = new byte[100 * 1024 * 1024]; r.NextBytes(arr); //allocate 100MiB
    arr = null;
}

GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
//should expect memory recovery...

我在Visual Studio中使用内存诊断工具,我也一直在寻找Windows任务管理器。 选择此代码是因为它反映了分配大型数组的应用程序的行为,然后将它们设置为null,然后再次分配(一堆图像)。 我遇到的行为是持续的内存增加,然后突然内存消耗下降(我想在GC收集这些对象之后)。

然而,这会导致频繁挂起没有太多RAM的系统。因此,如果GC可以更频繁地收集这些对象,将会很有帮助。

0 个答案:

没有答案