System.Runtime.Serialization.DataContractSerializer线程安全吗?

时间:2013-05-24 21:12:31

标签: .net thread-safety datacontractserializer

我希望同时缓存多个线程要使用的DataContractSerializer的单个实例,以避免对同一根类型多次实例化序列化程序的代价。每个线程将序列化不同的对象,但DataContractSerializer对象本身将被共享。 (我不打算使用IDataContractSurrogateDataContractResolver,这显然与更复杂/正式的XML / XSD架构有关。)

我会好吗?

In MSDN under "Thread Safety" for System.Runtime.Serialization.DataContractSerializer,它说:

  

除了实例之外,此类的实例是线程安全的   用于IDataContractSurrogate的实现或   DataContractResolver。

我发现这有点模糊(正如MSDN线程安全指南的典型情况)但它似乎表明我的用例是合适的。如果您可以指出个人经验,单元测试或演示它的框架反汇编,可以获得奖励:)

P.S。我不认为这是Is WCF's DataContractSerilaizer thread safe?的副本,因为该人的问题与DataContractSerializer本身的线程安全无关。

1 个答案:

答案 0 :(得分:1)

是的,您的用例是合适的。 DataContractResolverIDataContractSurrogate的实现都由DataContractSerializer的用户完成。如果您没有实现和配置它们,则没有线程问题(否则MSDN文档将是完全错误的。)

我甚至会更进一步,并假设MSDN仅排除使用DataContractResolver和IDataContractSurrogate,因为它们可能以错误的方式完成(即不是线程安全的)。但遗憾的是,在文档中没有证据证明这一点。