我使用序列化来估计对象使用的内存量。 我已经读过this ,和 this 。 所以我知道使用分析器或 sizeof(对于值类型)可能会更好。
我想知道,序列化对象和内存中的对象有什么区别?序列化对于对象大小估计来说是可靠的?
我对 C# 序列化机制特别感兴趣。
最佳答案
数据的序列化形式与内存中的不一样;例如,集合/字典将涉及项目、数组、哈希桶/索引等的多个对象 - 但原始数据(序列化时)通常只是数据 - 所以你序列化时可能会看到较小的体积。
同样,像 BinaryFormatter
这样的东西必须包含大量(详细)类型元数据 - 但在对象中它只有一个(简洁)类型句柄 - 所以你可能会看到 <序列化数据中有更多数据。同样,序列化器(除非手动优化)需要标记各个字段 - 但在内存中,这隐含在对象地址的偏移量中。
因此,您可能会从序列化中获得一个数字,但它不是相同数字。
要准确了解对象图的大小是很棘手的。 SOS 可能会有所帮助;否则,创建一个完整的负载并进行划分。很粗糙,但它可能会起作用。
关于c# - 序列化对于对象大小估计可靠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760230/