内存中对象的大小

时间:2012-02-17 07:22:43

标签: c# .net

  

可能重复:
  How to get object size in memory?

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

2 个答案:

答案 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是其中的一部分。