Пример #1
0
        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");
        }
Пример #2
0
 private static string GetGenerationType(GenerationInSegment generation)
 {
     return(GetGenerationType(generation.Generation));
 }