6

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

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

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

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

4

1 回答 1

4

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

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

希望(但尚未测试)DataContractSerializer能够类似地工作;但是简单地缓存它肯定没有害处,也许在静态只读字段中

请注意,这会DataContractSerializer限制您可以使用的 xml 布局......只要您对此感到满意;-p

于 2009-07-18T11:37:52.917 回答