c# - 序列化对于对象大小估计可靠吗?

标签 c# memory serialization object

我使用序列化来估计对象使用的内存量。 我已经读过this ,和 this 。 所以我知道使用分析器或 sizeof(对于值类型)可能会更好。

我想知道,序列化对象和内存中的对象有什么区别?序列化对于对象大小估计来说是可靠的?

我对 C# 序列化机制特别感兴趣。

最佳答案

数据的序列化形式与内存中的不一样;例如,集合/字典将涉及项目、数组、哈希桶/索引等的多个对象 - 但原始数据(序列化时)通常只是数据 - 所以你序列化时可能会看到较小的体积。

同样,像 BinaryFormatter 这样的东西必须包含大量(详细)类型元数据 - 但在对象中它只有一个(简洁)类型句柄 - 所以你可能会看到 <序列化数据中有更多数据。同样,序列化器(除非手动优化)需要标记各个字段 - 但在内存中,这隐含在对象地址的偏移量中。

因此,您可能会从序列化中获得一个数字,但它不是相同数字。

要准确了解对象图的大小是很棘手的。 SOS 可能会有所帮助;否则,创建一个完整的负载并进行划分。很粗糙,但它可能会起作用。

关于c# - 序列化对于对象大小估计可靠吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/760230/

相关文章:

java - 如何在 Storm 拓扑中序列化非原始类型(您自己的类)的字段?

c# - 如何创建用于添加数据集合的动态表单?

c# - 如何将 bootstrap.css 添加到 pdf 文档 itextsharp

c++ - 如何释放 Protocol Buffer 内存

c++ - 由已移动的唯一指针管理的对象的引用会发生什么情况?

serialization - 如何在 IPython 中安装 dill?

c# - 为什么我的 ASP.NET 操作寻找错误的 View ?

c# - 如何将 public void PassValue(string) 中的文本调用到 private void Form1_Load()

C++ 将 5 字节结构与缓存行对齐

python - 将 Unicode 对象转换为 Python Dict