2

まず第一に、これが初心者の質問である場合はすみませんが、私は初めてですprotobuf-net

TypeModel.Create()でシリアル化するときに使用する人もいれば、直接protobuf-net呼び出すSerializer(デフォルトのシングルトンを使用する)人もいることに気づきましたRuntimeTypeModel.Default

違いはなんですか?いつも同じものを再利用するとRuntimeTypeModel.Default、パフォーマンス上のメリットが得られると思いますが、その代わりに何を諦めますか?

Typeシリアル化を呼び出すときにオブジェクトのをすでに知っている場合、どちらのアプローチが優れていますか?

ありがとう

4

1 に答える 1

2

k; のメソッドは、Serializer.*主にへのショートカットとして機能するようになりましたRuntimeTypeModel.Default.*。それらがまだ存在する理由は3つあります。

  • 快適
  • 多くの既存のサンプルコード
  • v1APIの互換性

ほとんどの人は、単一のモデルのみを必要とします。ただし、必要に応じて、システムはさまざまな構成のさまざまな並列モデルをサポートします。ただし、ほとんどの使用法ではありそうにありません。別のモデルインスタンスを使用するだけでシステム全体をリセットできるため、テストが大幅に容易になります。だから:あなたができる理由(あなたが望むなら、ほとんどの人はそうしないでしょう)は複数のモデルインスタンスを持つことができます:

  • テスト、主に私:)
  • 異なるレイアウト/バージョン間での移行

余談TypeModelですが、「プリコンパイル」機能(主に電話デバイスなどを対象)を使用している場合は、APIも公開されます。これにより、カスタムモデルタイプのアセンブリが生成され、次の方法で使用できます。

var serializer = new MyCustomSerializer();

ここでMyCustomSerializer : TypeModel-この場合はではありませんがRuntimeTypeModel

于 2013-02-17T03:52:47.730 に答える