5

我正在使用 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;}
4

1 回答 1

5

哇。简直哇。感谢您提出这个问题。有一个小故障,它在一些场景中错误地没有应用组编码,包括你的。对于 protobuf-net,这并不是什么大问题,因为 group 和 string 可以互换处理,但这仍然是一个令人尴尬的故障,尤其是因为“group”是(正如你正确使用的那样)使事情向前发展的关键 -仅用于序列化大图。

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

于 2012-06-07T12:13:39.633 回答