1

これはやり過ぎかもしれませんが、後続のチャタリングで完全なURIの代わりに2〜4バイトのプレースホルダーを使用するように、両側に以前に転送されたURIのコピーを保持させることにより、クライアント/サーバープロトコルのネットワーク消費を削減しようとしています。

問題は、転送されるすべての複雑なオブジェクトをリフレクトして、処理が必要なURIを見つけるのにかなりの費用がかかると思いますが、シリアライザーはすでにこれらすべてのフィールドにアクセスしており、おそらくリフレクションよりもはるかに高速なメカニズムを使用しています。

これはprotobuf-netで実行できますか?

4

2 に答える 2

2

これがSerialize/への単一の呼び出しの一部である場合Deserialize(つまり、データの同じuriが複数の場所で繰り返されている場合)、これらの文字列を参照として扱うように指示するだけで、すでにこれを行うことができます(文字列の特別な処理があるため、同じ文字列の内容の2つの異なる参照は等しいと見なされます):

[ProtoMember(7, AsReference=true)]
public string Uri {get;set;}

シリアル化中に、 (で装飾された)新しい文字列値を最初に検出AsReference=trueすると、文字列を表す一意のトークンが生成されます。同じ文字列をその後使用すると、トークンのみがシリアル化されます。

これがSerialize/への個別の呼び出しである場合Deserialize、いいえ:手動で行う必要があります。いくつかの方法を考えることができますが、これはシリアル化レイヤーの外部で処理する方がよいと思います。

于 2012-08-30T07:07:50.157 に答える
1

URIをトークン化するために使用しているオブジェクトをカスタマイズし、その特定のオブジェクトがトークナイザーであるかどうかを確認できるインターフェイスを継承または実装することができますか?

その場合は、BeforeSerialization/AfterDeserializationを使用して変換を行うことができる場合があります。

于 2012-08-30T01:49:40.170 に答える