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

Caching 缓存DataContractSerializer实例是个好主意吗?,caching,windows-services,xml-serialization,datacontractserializer,Caching,Windows Services,Xml Serialization,Datacontractserializer,我正在编写一个windows服务应用程序,它需要在执行过程中反复序列化和反序列化XML文档。由于我需要序列化和反序列化在编译期间未知的泛型类型(我不知道需要序列化/反序列化多少类型),我想知道是否最好保留我实例化的DataContractSerializer对象的缓存,以便序列化和反序列化对象 我问这个问题是因为我知道缓存XmlSerializer类实例是一个好主意,因为它们在内存中创建了一个动态程序集,并且在内存中动态创建的程序集不会被垃圾收集 我读到DataContractSerialize

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

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

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

为了能够序列化内部属性,我选择使用DataContractSerializer而不是XmlSerializer

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

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

我希望(但尚未测试)
DataContractSerializer
也能起到类似的作用;但简单地缓存它肯定没有什么坏处,可能是在一个静态只读字段中


请注意,
DataContractSerializer
限制您可以使用的xml布局。。。只要你同意-p

您知道在使用DataContractSerializer时对xml布局施加了哪些限制吗?我想知道,只是为了确保我同意:PThere没有与[xmltattribute]等价的东西,这是最明显的。如果您的主要目标是序列化数据,那么这很好(其他各种情况也是如此)。如果您的主要目的是在特定的布局中编写xml,那么可能会很麻烦。