我的类的实例使用多少字节? [重复]

问题描述 投票:1回答:1
  1. 构造函数调用后,下一个类的实例有多大?我想这通常可以写成size = nx + c,其中x = 4在x86中,x = 8(在x64中)。 n =? c =?
  2. 。NET中是否有一些方法可以返回此数字?
{
    byte[][] a;
    int[] b;
    List<Node> c;
    public Node()
    {
        a = new byte[3][];
        b = new int[3];
        c = new List<Node>(0);
    }
}
c# .net memory-management micro-optimization
1个回答
0
投票

没有单个公式可以计算出来。这在很大程度上取决于硬件,操作系统,平台,框架的版本,Windows的版本等。每个对象还具有许多与之相关的东西-指向类型,方法,线程,应用程序域,内存地址,syncroot对象的指针锁定。因此,没有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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.