.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);
}
}
答案 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
}
}