3

我想缓存DataContractSerializer多个线程同时使用的单个实例,以避免为同一根类型多次实例化序列化程序的惩罚。每个线程都将序列化一个不同的对象,但DataContractSerializer对象本身将被共享。(我不会使用IDataContractSurrogateor DataContractResolver,这显然与更复杂/正式的 XML/XSD 模式有关。)

我会好吗?

在 System.Runtime.Serialization.DataContractSerializer 的“线程安全”下的 MSDN 中,它说:

此类的实例是线程安全的,除非该实例与 IDataContractSurrogate 或 DataContractResolver 的实现一起使用。

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

PS 我不认为这是 WCF 的 DataContractSerilaizer 线程安全的副本吗?因为那个人的问题原来与DataContractSerializer它本身的线程安全无关。

4

1 回答 1

2

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

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

于 2015-08-24T07:12:45.267 回答