内存中对象的大小

本文关键字:对象 内存 | 更新日期: 2023-09-27 18:24:51

可能重复:
如何在内存中获取对象大小?

很明显,在运行时,有可能知道对象占用的内存吗?怎样具体来说,我想知道RAM的占用量。

内存中对象的大小

对于值类型,请使用sizeof(object value)

对于非托管对象,请使用Marshal.SizeOf(object obj)

不幸的是,上面两个不会得到被引用对象的大小

对于托管对象:没有直接的方法可以获得它们用于托管对象的RAM大小,请参阅: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

档案器

最好使用探查器。

您可以使用CLR Profiler来查看每种类型(而不是特定对象)的分配大小。还有一些商业产品可以帮助您监控程序的内存使用情况。JetBrains dotTrace和RedGate Ants就是其中之一。