我的类的实例使用了多少字节
本文关键字:多少 字节 实例 我的 | 更新日期: 2023-09-27 17:57:29
- 调用构造函数后,以下类的实例有多大?我想这通常可以写成size=nx+c,其中x=4x86中的x=8。n=?c=
- 在.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
}
}