protobuf-net を使用して、ディープ オブジェクト グラフをシリアライズおよびデシリアライズしています。これらのグラフの一部のメンバーは、いくつかのオブジェクトに対する多対 1 の関係の場合と同様に、実際には多くのグラフにわたって何度も繰り返されます。たとえば、Saleオブジェクトはグラフであり、そのStoreメンバー (場合によってはそれ自体がサブグラフ) は 10 の可能なストアのうちの 1 つにすぎないため、多くのメッセージで何度も繰り返されます ( Saleグラフ)。
これらのオブジェクトのシリアライゼーションを何らかの方法でキャッシュできれば、明らかなパフォーマンス上の利点を得ることができます。理想的には、RuntimeModelに、特定の型 (この場合はStore ) をサロゲートのように拡張ポイントを通じて処理する必要があることを伝えたいと考えていますが、生のシリアル化バイトを提供することはできます。
私たちの制約の 1 つは、これらの "フック" (Python クライアントのスクリュー パフォーマンスの最適化!) なしで、他のプラットフォーム (Python など) のクライアントが直接解析できるようにするために、生成されたメッセージは引き続き protobuf-net と互換性がある必要があるということです。
サロゲートを調べましたが、サロゲートが生成するもの (この場合はバイト[] 配列) は (ご想像のとおり) その型として (つまり、バイト[] 配列として) シリアル化され ます。したがって、Python クライアントが期待するStoreオブジェクトと互換性がありません。
また、拡張機能についても調べました。キャッシュされたシリアル化されたStoreを余分なフィールドで何らかの方法でハッキングしたとしても、Python クライアントでは振り出しに戻ります。
このシナリオで使用できる他の拡張メカニズムはありますか?