显然在运行时可以知道对象占用的内存吗?怎么样?具体来说,我想知道占用的RAM量。
答案 0 :(得分:14)
对于值类型,请使用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
<强>概述强>
使用分析器是最好的。
答案 1 :(得分:1)
您可以使用CLR Profiler查看每种类型(不是特定对象)的分配大小。还有一些商业产品可以帮助您监控程序内存的使用情况.JetBrains {{3} }和RedGate dotTrace是其中的一部分。