我正在学习 PerfView 并尝试了 GCStats 报告。我创建了一个简单的应用程序,它在堆上做了很多内存分配:
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
GcReport();
const int size = 10 * 1024 * 1024;
var list = new List<int>();
for (int i = 0; i < size; i++)
{
list.Add(i);
}
for (int i = 0; i < size; i++)
{
object obj1 = list[i];
object obj2 = list[i];
if (obj1 == obj2)
Console.WriteLine("Match found");
}
GcReport(); // <-- results are shown below
}
private static void GcReport()
{
Console.WriteLine($"Gen0: {GC.CollectionCount(0)}");
Console.WriteLine($"Gen1: {GC.CollectionCount(1)}");
Console.WriteLine($"Gen2: {GC.CollectionCount(2)}");
}
}
这里是 PerfView 的日志文件,它显示了第二个 GcReport() 方法的结果:
如您所见,在 PerfView 的报告和控制台日志结果中,GC 收集的数量是不同的。有人可以解释一下,为什么数字不同?