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 の場合、グループと文字列は交換可能に扱われるため、これは大したことではありませんが、特に「グループ」が (正しく使用したように) 物事を進める上で重要であるため、これはまだ少し厄介な問題です-大きなグラフをシリアライズする場合のみ。

これはローカルとソースで修正しましたが、正式なリリースを行う前に、もう少し安定性テストを行いたいと考えています。ソースからビルドすることに満足している場合は、問題なく動作するはずです。または、必要に応じて dll を電子メールで送信することもできます。

于 2012-06-07T12:13:39.633 に答える