如何使用 protobuf 序列化大型嵌套数组?
Posted
技术标签:
【中文标题】如何使用 protobuf 序列化大型嵌套数组?【英文标题】:How to serialize large nested arrays with protobuf? 【发布时间】:2012-06-07 10:42:48 【问题描述】:我正在使用 protobuf-net 进行二进制序列化。我在序列化 Class A 时遇到了 OutOfMemory。使用 BinaryFormatter 可以很好地序列化同一个对象。
以下是类示例:
[ProtoContract]
class A:
[ProtoMember(1, DataFormat = DataFormat.Group)]
B[] Array1 get; set;
....
class B:
[ProtoMember(1)]
string Field1 get; set;
[ProtoMember(2)]
string Field1 get; set;
[ProtoMember(3, DataFormat = DataFormat.Group)]
C[] Array2 get; set; // 20000 elements
....
class C:
[ProtoMember(1)]
string Field1 get; set;
[ProtoMember(2)]
string Field1 get; set;
【问题讨论】:
【参考方案1】:哇。简直哇。感谢您提出这个问题。有一个小故障,它在一些场景中错误地没有应用组编码,包括你的。对于 protobuf-net,这并不是什么大问题,因为 group 和 string 可以互换处理,但这仍然是一个令人尴尬的故障,尤其是因为“group”是(正如你正确使用的那样)使事情向前发展的关键 -仅用于序列化大图。
我已经在本地和源代码中修复了这个问题 - 但是,我想在正式发布之前进行更多的稳定性测试。如果您乐于从源代码构建,它现在应该可以正常工作 - 或者如果您愿意,我可以通过电子邮件将 dll 发送给您。
【讨论】:
谢谢。如果你给我发个 dll 邮件就好了。 @shtriha 好的。在接下来的几个小时里我会离开电脑,但我会稍后再做。以上是关于如何使用 protobuf 序列化大型嵌套数组?的主要内容,如果未能解决你的问题,请参考以下文章
Protobuf-net:如何调试“不支持嵌套或锯齿状列表和数组”
ProtoBuf-Net 错误消息 - “不支持嵌套或锯齿状列表和数组”