私は、私がかなり理解していない奇妙な状況が起こっています。Protobuf-net v2と大きな辞書
私は 'センサー'のリストを含む監視ブイに関するさまざまなメタデータを保持する 'データセット'クラスを持っています。
それぞれ現在の「センサー状態」です。
各 'sensorstate'には、それに関するメタデータ(タイムスタンプ、変更の理由など)がありますが、最も重要なのはDictionary<DateTime,float>
の値です。
これらのセンサは、一般的に50Kのデータポイント(15分データの読み取り値の価値がある年)の上向きに持っているので、私はデフォルトの.NET BinaryFormatter
よりも直列化で少し速かった何かを探していましたので、幻想シリアライズされますProtobuf-netを設定速い。
残念なことに私の問題は、値の辞書が既に同じキーが追加されたアイテムが存在するため例外をスローするときにデシリアライズで発生し、デシリアライズするための唯一の方法は 'OverwriteList'を有効にすることですシリアル化しているときに重複するキーがない(それは辞書です)ので、逆シリアル化するとキーが重複するのはなぜですか?これはまた、データの完全性の問題を引き起こす。
これを説明する助けがあれば、非常に感謝します。
(ProtoMember属性IDを与えるときには、クラスやプロジェクト全体で一意である必要がありますか?また、protobuf-netと組み合わせて使用するロスレス圧縮の推奨事項を探しています
が編集)かなり大きななっている:私はちょうどここにGitHubの上に私のソースを入れてきました
が問題のクラスである
SensorState(注:これは、現在持っているために、真のOverwriteList =を持っています他の開発のために働いています)
ここでは例である私はすでにSkipContructorフラグを使用してみましたが、それはOverwriteListは、値の辞書にも真でなければ、それは例外を取得し、trueに設定してもして。
こんにちは。私はSensorStateについて簡単に見てきましたが、実際にジャンプして何かを再現できる最小限の状態ではありません(コンパイルするためにファイルを増やしてみましたが、成功しませんでした)。私は以下の* minimal *の例(提供されたデータの処理)を追加しました。問題はありません。この問題を示す最小限の実用的で再現性のある例を提供することで、私を助けてくれるでしょうか? –