代码之家  ›  专栏  ›  技术社区  ›  Jeffrey Cameron

如何测量单个对象在.NET中占用的内存量

  •  9
  • Jeffrey Cameron  · 技术社区  · 15 年前

    有一个有点相关的问题 here 但对于如何测量单个物体,还没有给出明确的答案

    4 回复  |  直到 8 年前
        1
  •  8
  •   Community CDub    8 年前

    没有确定的方法,因为这对于任何类型的对象都不简单。

    如果该对象包含对其他对象的引用怎么办?如果其他对象有其他对象引用它们呢?哪个对象实际上拥有那个内存空间?是创造它的人还是最后一个接触它的人?在任何一点上它都可能有不同的所有者。或者你只关心引用占用了多少空间?

    How to get object size in memory?

    C#: Memory usage of an object

    Find out the size of a .net object

    How much memory does a C#/.NET object use?

        2
  •  3
  •   Mikael Svenson    15 年前

    没有简单的方法 sizeof 只适用于值类型。一个典型的对象包含对列表和其他对象的引用,因此您需要遍历所有指针以获得实际的字节计数,并添加指针大小。

    您可以查看.Net分析API,或使用类似dotTrace的内存探查器。内存探查器至少可以帮助您查看内存分配的位置,以及应用程序中是否存在内存分配问题。这通常比实际对象大小更有用。

        3
  •  3
  •   serhio    14 年前

    如果你能-序列化它!

    Dim myObjectSize As Long
    
    Dim ms As New IO.MemoryStream
    Dim bf As New Runtime.Serialization.Formatters.Binary.BinaryFormatter()
    bf.Serialize(ms, myObject)
    myObjectSize = ms.Position
    
        4
  •  1
  •   John Alexiou    15 年前

    我想知道怎么做 System.Runtime.InteropServices.Marshal.SizeOf() 作品?在Marshal对象下有很多有趣的静态函数,在这里可能会有所帮助。