2012-02-17 3 views
4

Можно создать дубликат:
How to get object size in memory?Размер объекта в памяти

Можно ли знать, очевидно, во время выполнения, память, занятую объектом? Как? В частности, я хотел бы знать объем занятой RAM.

+1

Используйте [профайлер памяти] (http://stackoverflow.com/search?q=%5Bc%23%5D+memory+profiler). – dtb

+0

Уже есть газилии обманов. Пожалуйста, выполните поиск перед публикацией. [Как получить размер объекта в памяти?] (Http://stackoverflow.com/questions/605621/how-to-get-object-size-in-memory). А также http://stackoverflow.com/questions/426396/how-much-memory-does-a-c-net-object-use. А также http://www.google.com/#hl=ru&sclient=psy-ab&q=.net+size+of+object+in+memory&pbx=1&oq=.net+size+of+object+in+memory&aq=f&aqi = g1 & акль = 1 & gs_sm = 3 & gs_upl = 987l6327l0l6549l29l20l0l9l9l5l2247l4909l9.7.0.3.9-1l29l0 & BAV = on.2, or.r_gc.r_pw.r_qf., cf.osb & Fp = f0b85e3c6de8b9f9 & BIW = 1440 & БиГ = 795 –

ответ

14

Для типов значений используйте sizeof(object value)

Для неуправляемых объектов используют Marshal.SizeOf(object obj)

К сожалению, два выше, не будет вам размеры ссылочных объектов.

Для управляемого объекта: Там нет прямого способа получить размер оперативной памяти они используют для управляемых объектов, см: http://blogs.msdn.com/cbrumme/archive/2003/04/15/51326.aspx

Или альтернативы:

System.GC.GetTotalMemory

long StopBytes = 0; 
foo myFoo; 

long StartBytes = System.GC.GetTotalMemory(true); 
myFoo = new foo(); 
StopBytes = System.GC.GetTotalMemory(true); 
GC.KeepAlive(myFoo); // This ensure a reference to object keeps object in memory 

MessageBox.Show("Size is " + ((long)(StopBytes - StartBytes)).ToString()); 

Источник: http://blogs.msdn.com/b/mab/archive/2006/04/24/582666.aspx

Профайлер

Использование профилировщика было бы лучшим.

+0

, кажется, что результат всегда 0 при попытке этот код на Список или массивы? – SHM

+0

Примечание. Это даст неточные результаты, если 'new foo()' выделяет другие вещи, что иногда бывает. –

1

Вы можете использовать CLR Profiler, чтобы увидеть размер распределения для каждого типа (не конкретный объект) .Есть также некоторые коммерческие продукты, которые могут помочь вам контролировать использование памяти Ваших program.JetBrains dotTrace и RedGate Ants некоторые из их.

Смежные вопросы