我班级的多少字节实例使用?

时间:2014-04-09 10:03:34

标签: c# .net memory-management micro-optimization

  1. 调用构造函数后跟随类的实例有多大? 我想这通常可以写成size = nx + c,其中x = 4 在x86中,x = 8中的x = 8。 n =? c =?
  2. .NET中有哪些方法可以返回这个数字吗?

    class Node { byte[][] a; int[] b; List<Node> c; public Node() { a = new byte[3][]; b = new int[3]; c = new List<Node>(0); } }

1 个答案:

答案 0 :(得分:0)

没有单一的公式可以计算出来。它在很大程度上取决于硬件,操作系统,平台,框架版本,Windows版本等。每个对象也有一堆与之相关的东西 - 指向类型,方法,线程,应用程序域,内存地址,同步对象的指针锁定。所以没有100%准确的衡量标准。

这将为您提供下限。你的实际对象需要更多。

还有其他方法可以计算这一点,例如使用Interops,但在一天结束时,他们也会给出估算值(请参阅 How to get object size in memory?Find size of object instance in bytes in c#)。

估计,在我的机器上(x64,为任何CPU编译,运行为x64位进程,Windows Server 2012 R2,.NET 4.5)这是

[Serializable]
class Node
{
    byte[][] a;
    int[] b;
    List<Node> c;
    public Node()
    {
        a = new byte[3][];
        b = new int[3];
        c = new List<Node>(0);
    }
}

[Test]
public void GetSize()
{    
    Node item = new Node();
    object o = new object();
    long size = 0;
    using (Stream s = new MemoryStream())
    {
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(s, item);
        size = s.Length; // <<<<<  918 bytes on my machine
    }
}