![]() |
1
66
因为这可能对我决定写这篇文章的人感兴趣,关于 序列化.NET对象的二进制格式是什么样子的,我们如何正确地解释它? 我的所有研究都基于 .net remoting:binary format data structure 规范。 示例类:
为了有一个工作示例,我创建了一个名为
|
![]() |
2
7
Vasily是对的,因为我最终需要实现自己的格式化程序/序列化过程,以便更好地处理版本控制和输出更紧凑的流(在压缩之前)。 但是,我确实想了解流中发生了什么,所以我写了一个(相对)快速的类,可以实现我想要的:
对于我来说,把它放在像codeproject这样的可见位置是不够有用的,所以我只是把这个项目放在我的网站上的一个zip文件中: http://www.architectshack.com/BinarySerializationAnalysis.ashx 在我的具体案例中,问题是双重的:
希望这能在某个时候帮助别人! 更新:IanWright与我联系,因为原始代码有问题,当源对象包含“decimal”值时,它崩溃了。现在已经纠正了这一点,我利用这个机会将代码移动到Github并给它一个(许可的,BSD)许可证。 |
![]() |
3
5
我们的应用程序运行大量数据。它可以占用1-2 GB的内存,就像你的游戏一样。我们遇到了同样的“存储同一对象的多个副本”问题。另外,二进制序列化存储了太多的元数据。在第一次实现时,序列化文件大约占用1-2GB。现在我设法降低了值-50-100MB。我们做了什么。 简短的回答-不要使用.NET二进制序列化,创建自己的二进制序列化机制。 我们有自己的BinaryFormatter类和ISerializable接口(有两个方法:序列化和反序列化)。 同一对象不应序列化多次。我们保存它的唯一ID并从缓存中恢复对象。 如果你要求的话,我可以分享一些代码。 编辑: 看来你是对的。看下面的代码-它证明我错了。
看起来像
你看过生成的文件吗?如果从代码示例中打开“temp-file0.txt”和“temp-file1.txt”,就会看到它有很多元数据。这就是我建议您创建自己的序列化机制的原因。 很抱歉喝咖啡。 |
![]() |
4
0
也许您可以在调试模式下运行程序并尝试添加控制点。 如果由于游戏的大小或其他依赖关系而无法实现这一点,那么您始终可以编写一个简单/小的应用程序,其中包括反序列化代码和从调试模式中进行扫视。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 6 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 6 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 6 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 7 月前 |