5

C# アプリで BinarySerialization を使用していますが、シリアル化する必要があるクラスのサイズと複雑さにより、シリアル化が遅くなり、ファイルが大きくなります。

独自のカスタム シリアライザーを作成するだけでよいのではないかと考えています。しかし、protobuf-net は、標準の .Net バイナリ シリアライゼーションよりも速度とサイズが大幅に優れていると主張しており、多数の特注のシリアライザーよりも簡単にアプリに追加できる可能性があります。

私たちのためにそれを機能させるためにかなりの時間と労力を費やす前に、契約を破るものがないかどうか知りたい. インターフェイス、抽象サブクラスのジェネリック リスト、カスタム ビット フラグ列挙型などで定義されたプロパティを使用しています。

4

3 に答える 3

6

ただし、protobuf-net は、コアの protobuf 仕様に準拠するためにできることを行い、次にいくつか (たとえば、継承を含む) を行います。

  • ICustomerv1 はインターフェイス ベースのプロパティ (つまり、その他)があまり得意ではありません。私はこれをv2で改善することに取り組んでいます
  • v1 はパラメーターなしのコンストラクターがあることを好みます (この要件は v2 で解除されます)
  • モデルをフィールドにマップする方法を指定する必要があります。v1 では、これを型で装飾する必要があります (または、名前などからいくつかのことを推測するオプションがあります) v2 では、これは外部で行うことができます
  • v1 では、flags enum は面倒です。v2 では列挙型を生の整数としてパススルーするオプションがあり、ファルグにより適しています。
  • 抽象化と継承は問題ありませんが、事前にすべての具象型を決定できる必要があります (それらを整数キーにマップするため)。
  • ジェネリックは大丈夫なはず
  • ジャグ配列/中間型のないネストされたリストは問題ありません - 中間型を中間型に導入することでこれをシムできます
  • すべてのコア タイプに組み込みのサポートがあるわけではありません (たとえば、新しい日付/時刻オフセット タイプ)。「v2」では、必要に応じて独自のシムを導入できます
  • これはツリー シリアライザーであり、グラフ シリアライザーではありません。私はそこにいくつかの考えがありますが、まだ実装されていません

シリアライズしたいものの限られた例がある場合は、それが機能する可能性があるかどうかを喜んで確認します(私は著者です)。

于 2010-08-11T21:05:00.723 に答える
0

既存のソフトウェア/既存の標準とやり取りする必要がある場合は適切ではありません。たとえば、SMTP サーバーとの通信には使用できません。

于 2010-08-11T21:03:51.243 に答える
0

引用するには、protobuf-net に関するブログのこちらをお読みください。

キャッチは何ですか?

ほとんどの場合、それだけです。WCF は、適切なすべての場合に protobuf-net を使用します。
オブジェクト (データ契約など)。これは、
ただし、操作ごとの制御(いつでもインターフェイスを分割できます
もちろん、エンドポイントは異なります)。

また、protobuf-net にはいくつかの微妙な違いがあります (特に空に関して)
オブジェクト)、単体テストなどを実行します。

フルファット WCF でのみ機能することに注意してください。Silverlight などには役に立ちません。
拡張機能がありませんが、これは新しいことではありません。

最後に、WCF のリゾルバーは面倒であり、AFAIK は完全なアセンブリの詳細を望んでいます
バージョン番号を含む; そのため、新しいバージョンを取得するときに維持する必要があるもう 1 つの点があります。
誰かがこれを回避する方法を知っているなら?
于 2010-08-11T21:08:19.407 に答える