我的类的实例使用了多少字节

本文关键字:多少 字节 实例 我的 | 更新日期: 2023-09-27 17:57:29

  1. 调用构造函数后,以下类的实例有多大?我想这通常可以写成size=nx+c,其中x=4x86中的x=8。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);
    }
}

我的类的实例使用了多少字节

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

这将为您提供一个下限。您的实际对象将占用稍多的空间。

还有其他方法可以计算这一点,例如使用Interops,但最终,它们也只会给出一个估计值(请参阅如何在内存中获取对象大小?和在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
    }
}