缓存DataContractSerializer实例是个好主意吗?

时间:2009-07-18 11:27:57

标签: caching windows-services xml-serialization datacontractserializer

我正在编写一个Windows服务应用程序,需要在执行期间反复序列化和反序列化XML文档。因为我需要序列化和反序列化在编译期间未知的泛型类型(我不知道我需要序列化/反序列化需要多少类型)我想知道是否保留缓存是一个好主意我实例化的DataContractSerializer对象用于序列化和反序列化对象。

我问这个问题,因为我知道缓存XmlSerializer类实例是一个好主意,因为它们在内存中创建了一个动态程序集,并且在内存中动态创建的程序集不会被垃圾回收。

我读到DataContractSerializer依赖于轻量级代码生成,但我并不常常了解它的细节。这就是为什么我问这个问题,我需要了解如果我根据需要实例化DataContractSerializer实例会导致我像XmlSerializer那样导致内存泄漏?

我选择使用DataContractSerializer而不是XmlSerializer来序列化内部属性。

1 个答案:

答案 0 :(得分:4)

  

...缓存XmlSerializer类实例是一个好主意,因为它们会在内存中创建动态程序集......

使用XmlSerializer,实际上取决于您是使用简单构造函数(new XmlSerializer(typeToHandle))还是更复杂的构造函数,它们允许您指定所有属性等运行。如果你只使用简单的构造函数,它会重新使用背景程序集,所以没有重复的惩罚。

期待(但尚未经过测试)DataContractSerializer同样工作;但是简单地缓存它可能没什么坏处,可能是在一个静态的只读字段中

请注意,DataContractSerializer会限制您可以使用的xml布局...只要您对它有好处;-p