我希望同时缓存多个线程要使用的DataContractSerializer
的单个实例,以避免对同一根类型多次实例化序列化程序的代价。每个线程将序列化不同的对象,但DataContractSerializer
对象本身将被共享。 (我不打算使用IDataContractSurrogate
或DataContractResolver
,这显然与更复杂/正式的XML / XSD架构有关。)
我会好吗?
In MSDN under "Thread Safety" for System.Runtime.Serialization.DataContractSerializer,它说:
除了实例之外,此类的实例是线程安全的 用于IDataContractSurrogate的实现或 DataContractResolver。
我发现这有点模糊(正如MSDN线程安全指南的典型情况)但它似乎表明我的用例是合适的。如果您可以指出个人经验,单元测试或演示它的框架反汇编,可以获得奖励:)
P.S。我不认为这是Is WCF's DataContractSerilaizer thread safe?的副本,因为该人的问题与DataContractSerializer
本身的线程安全无关。
答案 0 :(得分:1)
是的,您的用例是合适的。 DataContractResolver和IDataContractSurrogate的实现都由DataContractSerializer的用户完成。如果您没有实现和配置它们,则没有线程问题(否则MSDN文档将是完全错误的。)
我甚至会更进一步,并假设MSDN仅排除使用DataContractResolver和IDataContractSurrogate,因为它们可能以错误的方式完成(即不是线程安全的)。但遗憾的是,在文档中没有证据证明这一点。