如何确定.NET中复杂对象的大小?

Pol*_*878 17 .net c# memory memory-management

有没有办法确定.NET中复杂对象的总大小?此对象由其他对象组成,可能包含对其他复杂对象的引用.此对象封装的某些对象可能是POD,其他对象可能不是.

Pav*_*aev 10

你拥有的不是一个"复杂的对象",而是一个对象图.要确定其总大小,您需要遍历该图 - 从一些根对象开始,并使用Reflection枚举引用类型的字段并检索它们的值(当然,检查循环).

要获得图表中特定对象的大小,请参阅相关问题的答案,但请注意,这是一个邪恶的黑客,完全不受支持,可能会破坏(并且可能已经被破坏),并可能导致批发小猫种族灭绝在天上的领域.也就是说,没有"非hacky"方法来获得精确的值,因为它是一个定义的实现细节 - 你不应该对它有任何用处.为了在调试/分析期间找出应用程序的内存使用情况,黑客已经足够了.