Как узнать потребление памяти объектами в кодеC#

Место общения программистов C#
Anonymous
Как узнать потребление памяти объектами в коде

Сообщение Anonymous »

Я хочу оценить размеры объектов в памяти с помощью диагностики, но я немного запутался: как размер всех объектов в памяти может быть больше общего размера памяти?
GC .GetTotalMemory() дает мне другое значение (меньшее), чем когда я перебираю все объекты в куче и суммирую их:
TotalSize: 22236, ObjectSize: 452999 >
А когда я смотрю в диспетчере задач, потребление памяти имеет другое значение (11,4 МБ)?
Так каково реальное потребление памяти? Моя цель — отслеживать наши объекты и потребление.
Что я делаю не так?
private static void EvaluateMemoryConsumption()
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();

long totalMemory = GC.GetTotalMemory(forceFullCollection: false);
long totalObjSize = 0;

using (var dataTarget = DataTarget.AttachToProcess(Process.GetCurrentProcess().Id, suspend: false))
{
using (var runtime = dataTarget.ClrVersions[0].CreateRuntime())
{
foreach (var segment in runtime.Heap.Segments)
{
foreach (var obj in segment.EnumerateObjects())
{
totalObjSize += (long)obj.Size;
}
}
}
}

Console.WriteLine($"TotalSize: {totalMemory}, ObjectSize: {totalObjSize}");

// TotalSize: 22236, ObjectSize: 452999
}


Подробнее здесь: https://stackoverflow.com/questions/789 ... ts-in-code

Вернуться в «C#»