【问题标题】:Size of object in memory [duplicate]内存中对象的大小[重复]
【发布时间】:2012-03-08 15:00:02
【问题描述】:

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

是否有可能在运行时知道一个对象占用的内存?如何?具体来说,我想知道占用的 RAM 量。

【问题讨论】:

标签: c# .net


【解决方案1】:

值类型使用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

分析器

最好使用分析器。

【讨论】:

  • 在 List 或数组上尝试此代码时,结果似乎始终为 0?
  • 注意:如果new foo() 分配其他东西,这将给出不准确的结果,有时是这种情况。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2016-09-17
    • 2011-05-06
    • 1970-01-01
    • 2022-11-29
    相关资源
    最近更新 更多