我正在编写一个Windows服务应用程序,需要在执行期间反复序列化和反序列化XML文档。因为我需要序列化和反序列化在编译期间未知的泛型类型(我不知道我需要序列化/反序列化需要多少类型)我想知道是否保留缓存是一个好主意我实例化的DataContractSerializer对象用于序列化和反序列化对象。
我问这个问题,因为我知道缓存XmlSerializer类实例是一个好主意,因为它们在内存中创建了一个动态程序集,并且在内存中动态创建的程序集不会被垃圾回收。
我读到DataContractSerializer依赖于轻量级代码生成,但我并不常常了解它的细节。这就是为什么我问这个问题,我需要了解如果我根据需要实例化DataContractSerializer实例会导致我像XmlSerializer那样导致内存泄漏?
我选择使用DataContractSerializer而不是XmlSerializer来序列化内部属性。
答案 0 :(得分:4)
...缓存XmlSerializer类实例是一个好主意,因为它们会在内存中创建动态程序集......
使用XmlSerializer
,实际上取决于您是使用简单构造函数(new XmlSerializer(typeToHandle)
)还是更复杂的构造函数,它们允许您指定所有属性等运行。如果你只使用简单的构造函数,它会重新使用背景程序集,所以没有重复的惩罚。
我期待(但尚未经过测试)DataContractSerializer
同样工作;但是简单地缓存它可能没什么坏处,可能是在一个静态的只读字段中
请注意,DataContractSerializer
会限制您可以使用的xml布局...只要您对它有好处;-p