예제 #1
0
        public void AddAllocation(ulong size, ulong count, string typeName)
        {
            if (!_allocations.TryGetValue(typeName, out var info))
            {
                info = new AllocationInfo(typeName);
                _allocations[typeName] = info;
            }

            info.AddAllocation(size, count);
        }
예제 #2
0
        private static void DumpStacks(AllocationInfo allocation, MethodStore methods)
        {
            var stacks = allocation.Stacks.OrderByDescending(s => s.Count).Take(10);

            foreach (var stack in stacks)
            {
                Console.WriteLine($"{stack.Count,6} allocations");
                Console.WriteLine("----------------------------------");
                DumpStack(stack.Stack, methods);
                Console.WriteLine();
            }
        }
예제 #3
0
        public AllocationInfo AddAllocation(int threadID, ulong size, ulong count, string typeName)
        {
            if (!_allocations.TryGetValue(typeName, out var info))
            {
                info = new AllocationInfo(typeName);
                _allocations[typeName] = info;
            }

            info.AddAllocation(size, count);

            // the last allocation is still here without the corresponding stack
            if (_perThreadLastAllocation.TryGetValue(threadID, out var lastAlloc))
            {
                Console.WriteLine("no stack for the last allocation");
            }

            // keep track of the allocation for the given thread
            // --> will be used when the corresponding call stack event will be received
            _perThreadLastAllocation[threadID] = info;

            return(info);
        }