gpt4 book ai didi

c# - 保存对象/序列化

转载 作者:太空狗 更新时间:2023-10-29 21:49:42 30 4
gpt4 key购买 nike

我正在尝试从 C 过渡到 C#,我有几个关于将对象保存到文件和序列化的问题。

在 C 中,如果你想保存一个数据结构,我被告知以文本格式将其保存为字符串通常是不必要的,而作为内存快照存在的二进制文件通常更好,因为它不会需要对字段进行编码/解码和匹配字符串。在 C# 中,方法似乎有所不同,它将对象字段分别转换为字符串或其他格式,然后在必要时重建对象。我不确定二进制序列化是如何工作的,但我认为它会将数据转换为某种格式并且不作为纯非格式化内存快照存在。

为什么在 C# 中不使用没有任何编码/解码的“内存快照”方法?我能想到的唯一原因是与其他代码和环境的兼容性,也许这与对象与常规结构的复杂性有关。

最佳答案

在 C# 中,您无权访问对象的内存布局。您无法获取对象的内存快照,也无法从快照创建对象。事实上,您甚至没有分数(是的,您在不安全代码中有分数,但您很少编写不安全代码)。

即使您确实可以访问对象使用的内存,它也可能无法保存到磁盘然后重新加载。如果您升级 .NET 环境,您可能会得到一个更好的优化器,它决定以不同方式重新排序对象的字段,或使用不同的内存对齐方式。

所以简而言之 - 无法访问对象内存,因此您需要逐字段序列化。

好处是,由于 .NET 具有反射功能,因此以这种方式序列化对象并不难。事实上,它比序列化一个包含指向其他 C++ 类的指针的 C++ 类要容易得多。

关于c# - 保存对象/序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31185400/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com