一:背景
在 内存泄漏
的系列问题中,有一类问题是 内存碎片化
导致的,而且这种更容易发生在 LOH 上,因为它默认不开启 对象压缩
,一般遇到这种情况,优先让朋友执行下面的代码应急。
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
后续再研究问题根源,这篇我们就来聊一聊如何用 PerfView
神器帮助我们寻找 内存碎片化
的根源。
二:碎片化洞察
1. WinDbg 的局限
为了方便讲述,先上一段造成 LOH内存碎片化
的测试代码。
internal class Program
{
static void Main(string[] args)
{
Test();
Console.ReadLine();
}
public static List<byte[]> list = new List<byte[]>