【发布时间】:2012-09-15 13:15:41
【问题描述】:
有没有办法以编程方式准确地确定 c# 中对象使用的内存量?我不关心这个过程有多慢,所以左右运行 GC 是可以接受的(当然我更喜欢效率更高的东西)。
序列化对象并查看结果长度似乎不太准确(在对该方法的简单测试中,我看到一个整数返回值 54)。
使用
GC.GetTotalMemory(true)似乎会产生不一致的值,更不用说它们看起来太大了。使用
Marshal.SizeOf(object)会产生准确的结果,但似乎只适用于基元。
如果这些方面没有可用的,另一种方法是根据使用的结构和所涉及的基元来计算大小。这也是可以接受的(尽管令人不安),但我需要知道计算对象开销等的正确方法。任何能向我展示如何做到这一点的文献都会很棒。
类似的SO问题(似乎都没有准确计算对象大小的具体方法):
How much memory does a C#/.NET object use?
How to get memory available or used in C#
How to get object size in memory?
sizeof() equivalent for reference types?
分析内存的工具(非编程方法):
http://www.microsoft.com/en-us/download/details.aspx?id=16273
【问题讨论】:
-
我认为大小是一个“实施细节”。