0

XmlSerialization は、クラスごとにシリアライザー プロキシを作成します。プロキシは別のアセンブリに存在するため、パブリック フィールドのみをシリアル化できます。

DataContract シリアル化では、プライベート フィールドもシリアル化できます。リフレクションを使用しているということですか?プロキシを使うより遅くないですか(初回以外)?

4

1 に答える 1

1

この protobuf-net ページは、 のパフォーマンスがDataContractSerializerよりも大幅に優れていることを示していますXmlSerializer。もちろん、常に独自のデータでテストする必要がありますが、 を置き換える場合は、パフォーマンスの向上が見られるXmlSerializer可能性が高くなります。DataContractSerializer

DataContractSerializer内部でどのように実装されているかはわかりませんが、一般的にシリアライザーは高度に最適化されています。DataContractSerializerこれは、WCF のパフォーマンスの大きな部分を占めるため、特に当てはまります。シリアライザーがオンザフライで MSIL コードを生成することは珍しくありません。これが完了DynamicMethodすると、(驚くべきことに!) 可視性チェック ( MSDNを参照) をバイパスできるため、リフレクションなしでプライベート フィールドにアクセスできます。

MSDNから:

十分なセキュリティ権限があれば、動的メソッドを使用して実装されたシリアライゼーション エンジンは、プライベート データと保護されたデータにアクセスして、エンジンの作成者によって作成されていないオブジェクトのシリアライゼーションを有効にすることができます。

于 2010-02-28T20:11:02.693 に答える