【发布时间】:2012-03-08 15:00:02
【问题描述】:
【问题讨论】:
-
已经有无数的骗子了。发帖前请先搜索。 How to get object size in memory?。还有stackoverflow.com/questions/426396/…。还有google.com/…
【问题讨论】:
值类型使用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
分析器
最好使用分析器。
【讨论】:
new foo() 分配其他东西,这将给出不准确的结果,有时是这种情况。
您可以使用CLR Profiler查看每种类型(不是特定对象)的分配大小。还有一些商业产品可以帮助您监控程序的内存使用情况。JetBrainsdotTrace和RedGate@ 987654323@ 是其中的一部分。
【讨论】: