private static void ShowStatsForGenerationInSegment(ClrHeap heap, GenerationInSegment generation, StringBuilder sb) { var statistics = new Dictionary <string, TypeEntry>(128); int objectCount = 0; for (int i = 0; i < generation.InstancesAddresses.Length; i++) { var address = generation.InstancesAddresses[i]; var type = heap.GetObjectType(address); var name = GetTypeName(type); ulong size = type.GetSize(address); if (!statistics.TryGetValue(name, out var entry)) { entry = new TypeEntry() { TypeName = type.Name, Size = 0 }; statistics[name] = entry; } entry.Count++; entry.Size += size; objectCount++; } var sortedStatistics = from entry in statistics.Values orderby entry.Size descending select entry; Console.WriteLine(" {0,12} {1,12} {2}", "Count", "TotalSize", "Class Name"); foreach (var entry in sortedStatistics) { Console.WriteLine($" {entry.Size,12:D} {entry.Count,12:D} {entry.TypeName}"); } Console.WriteLine($" Total {objectCount} objects"); }
private static string GetGenerationType(GenerationInSegment generation) { return(GetGenerationType(generation.Generation)); }