我们在 .NET Framework 中用 C# 编写了一个 Windows 服务,几个小时后我们注意到第 2 代堆的大小异常增长。 这个空间的大部分是空闲的,dotMemory Profiler 向我们展示了我们在这一代上有大约 90% 的碎片。 我如何强制执行 .NET GC 来压缩此空间?这意味着 GC 可以释放此空间,但无法压缩它以供进一步使用。
最佳答案
因为第0,1,2代会被GC自己压缩和删除,
猜测对象分配在大对象堆上(LOH,对象大小 >= 85K)
所以,你可以试试LargeObjectHeapCompactionMode,它可以压缩loh
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
引用:MSDN
关于c# - 强制 .NET GC 压缩或整理第 2 代堆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39228460/