c# - 强制 .NET GC 压缩或整理第 2 代堆?

标签 c# .net garbage-collection defragmentation heap-fragmentation

我们在 .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/

相关文章:

c# - VS 2008 Professional,Smart Device .NET C# 项目 - 构建缓慢

c# - MySQL Entity Framework 按日期分组和选择

c# - 我如何获得 C# 中两个列表的差异?

c# - 使用 MongoDB C# 驱动程序查询派生类型值

java - Java 中垃圾收集的频率是多少?

JAVA设置垃圾回收选项

c# - 复杂的 "Contains"字符串比较

c# - 使用 WPF 动画淡出任何控件

.net - ORACLE 和 Entity Framework 。错误 :the specified store provider cannot be found in the configuration or is not valid

c# - 在 visual studio 中调用垃圾收集