我正在编写一个Windows服务应用程序,该应用程序在执行过程中需要反复对XML文档进行序列化和反序列化。由于我需要序列化和反序列化在编译时不知道的通用类型(我不知道先验需要序列化/反序列化的类型有多少种),我想知道是否保留缓存是个好主意我实例化了DataContractSerializer对象,以对对象进行序列化和反序列化。
我问这个问题是因为我知道缓存XmlSerializer类实例是个好主意,因为它们在内部的内存中创建了一个动态程序集,并且在内存中动态创建的程序集没有被垃圾收集。
我读到DataContractSerializer依赖于轻量级代码生成,但是我对它的细节并不了解。这就是为什么我问这个问题,我需要了解如果我根据需要实例化DataContractSerializer实例是否会像XmlSerializer那样导致我发生内存泄漏?
我选择使用DataContractSerializer而不是XmlSerializer来序列化内部属性。
最佳答案
使用XmlSerializer
,实际上取决于您使用的是简单构造函数(new XmlSerializer(typeToHandle)
),还是使用更复杂的构造函数,这些构造函数允许您在运行时指定所有属性等。如果仅使用简单的构造函数,它将重新使用后台程序集,因此不会重复执行任何操作。
我希望(但尚未测试)DataContractSerializer
可以类似地工作;但是简单地将其缓存(在静态只读字段中)当然没有害处
请注意,DataContractSerializer
限制了您可以使用的xml布局...,只要您对此表示满意即可; -p