Как определить количество памяти выделенное под managed объекты

суббота, 22 ноября 2008, Роман Калита

Всем знакома оперция sizeof из C++ но в С# имеет жесткие ограничения и оставлена скорее для написания unsafe блоков и совместимости с Win32API. Sizeof в шарпе можно применять только в unsafe блоке и над unmanaged объектами:

unsafe { int size = sizeof(int); }  

Но вот в чем вопрос как определить сколько занимает управляемый объект в памяти и возможно ли это? На второй вопрос можно дать ответ что в майкрософт специально не реализовали такую возможность, так как шарп он и на то шарп что управляет памятью сам и нечего даже заглядывать туда.

Но все так иногда хочется заглянуть сколько занимает объект. Как это сделать? Это вопрос находчивости. Есть один способ который дает приблизительные результаты. Вот он:

long stopBytes = 0; Employee employee;
long startBytes = System.GC.GetTotalMemory(true);
employee = new Employee();
stopBytes = System.GC.GetTotalMemory(true);
GC.KeepAlive(employee); // На всякий случай промаркируе объект от случаного удаления GC
Console.WriteLine(string.Format("Size in memory: {0} bytes", ((long)(stopBytes - startBytes)).ToString()));

Если у Вас есть способ лучше напишите обьязательно.


Ищите нас в интернетах!

Комментарии

Свежие вакансии