DataContractSerializer
同じルートタイプに対してシリアライザーを複数回インスタンス化するというペナルティを回避するために、複数のスレッドで同時に使用される単一のインスタンスをキャッシュしたいと考えています。各スレッドは異なるオブジェクトをシリアル化しますが、DataContractSerializer
オブジェクト自体は共有されます。(明らかに、より複雑で正式な XML/XSD スキーマに関連するIDataContractSurrogate
orは使用しません。)DataContractResolver
私は大丈夫でしょうか?
System.Runtime.Serialization.DataContractSerializer の「スレッド セーフティ」の下の MSDN には、次のように書かれています。
このクラスのインスタンスは、インスタンスが IDataContractSurrogate または DataContractResolver の実装で使用される場合を除き、スレッド セーフです。
(MSDN スレッド セーフ ガイダンスの典型であるように) これは少しあいまいですが、私のユース ケースが適切であることを示しているようです。個人的な経験、単体テスト、またはそれを示すフレームワークの逆アセンブリを指摘できる場合のボーナス:)
PS これはIs WCF's DataContractSerilaizer thread safe の複製ではないと思いますか? その人の問題は、それ自体のスレッドセーフとは無関係であることが判明したためDataContractSerializer
です。