如何使用protobuf序列化大型嵌套数组?

5

我正在使用protobuf-net进行二进制序列化。当我尝试对类A进行序列化时,出现了内存不足的错误。但是同一个对象在使用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个回答

5

哇,简直太棒了。感谢您提出这个问题。在一些情况下,存在一个故障,导致未正确应用组编码,其中包括您的情况。对于protobuf-net来说,这不是什么大问题,因为组和字符串可以互换使用,但这仍然是一个有点尴尬的故障,尤其是因为“group”(正如您正确使用的那样)是使事物向前移动、序列化大图形的关键。

我已经在本地和源代码中修复了此问题-但是,在进行正式发布之前,我想进行更多的稳定性测试。如果您愿意从源代码构建,则现在应该可以正常工作-或者,如果您愿意,我可以通过电子邮件向您发送一个dll文件。


谢谢。如果您能给我发送一个dll文件,那就太好了。 - shtriha
@shtriha 好的。我接下来几个小时离开电脑,但稍后会处理。 - Marc Gravell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接