XmlSerialization は、クラスごとにシリアライザー プロキシを作成します。プロキシは別のアセンブリに存在するため、パブリック フィールドのみをシリアル化できます。
DataContract シリアル化では、プライベート フィールドもシリアル化できます。リフレクションを使用しているということですか?プロキシを使うより遅くないですか(初回以外)?
XmlSerialization は、クラスごとにシリアライザー プロキシを作成します。プロキシは別のアセンブリに存在するため、パブリック フィールドのみをシリアル化できます。
DataContract シリアル化では、プライベート フィールドもシリアル化できます。リフレクションを使用しているということですか?プロキシを使うより遅くないですか(初回以外)?
この protobuf-net ページは、 のパフォーマンスがDataContractSerializer
よりも大幅に優れていることを示していますXmlSerializer
。もちろん、常に独自のデータでテストする必要がありますが、 を置き換える場合は、パフォーマンスの向上が見られるXmlSerializer
可能性が高くなります。DataContractSerializer
DataContractSerializer
内部でどのように実装されているかはわかりませんが、一般的にシリアライザーは高度に最適化されています。DataContractSerializer
これは、WCF のパフォーマンスの大きな部分を占めるため、特に当てはまります。シリアライザーがオンザフライで MSIL コードを生成することは珍しくありません。これが完了DynamicMethod
すると、(驚くべきことに!) 可視性チェック ( MSDNを参照) をバイパスできるため、リフレクションなしでプライベート フィールドにアクセスできます。
MSDNから:
十分なセキュリティ権限があれば、動的メソッドを使用して実装されたシリアライゼーション エンジンは、プライベート データと保護されたデータにアクセスして、エンジンの作成者によって作成されていないオブジェクトのシリアライゼーションを有効にすることができます。