6

Estoy escribiendo una aplicación de servicio de Windows que necesita serializar y deserializar documentos XML repetidamente durante su ejecución. Como necesito serializar y deserializar tipos genéricos que no se conocen durante el tiempo de compilación (no sé a priori cuántos tipos necesito serializar/deserializar) me gustaría saber si es una buena idea mantener un caché de los objetos de DataContractSerializer que instalé para serializar y deserializar los objetos.¿Es una buena idea almacenar en caché las instancias de DataContractSerializer?

Estoy haciendo esta pregunta porque sé que es una buena idea almacenar en caché las instancias de la clase XmlSerializer ya que crean un ensamblaje dinámico en la memoria debajo del capó y los ensamblajes creados dinámicamente en la memoria no son basura.

He leído que el DataContractSerializer se basa en la generación de código ligero, pero no soy habitual con los detalles. Es por eso que estoy haciendo esta pregunta. ¿Debo entender si instalo las instancias de DataContractSerializer según lo necesitado que me llevaría a una pérdida de memoria como lo haría el XmlSerializer?

He elegido usar el DataContractSerializer en lugar del XmlSerializer para poder serializar las propiedades internas.

+0

(respondió al comentario) –

Respuesta

4

... Es una buena idea para almacenar en caché las instancias de la clase XmlSerializer ya que crean un montaje dinámico en la memoria bajo el capó ...

Con XmlSerializer, en realidad depende de si se utiliza el constructor simple (new XmlSerializer(typeToHandle)), o los constructores más complejos que le permiten especificar todos los atributos, etc. en tiempo de ejecución. Si solo usas el constructor simple, volverá a utilizar el ensamblaje de fondo, por lo que no habrá penalización de repetición.

Yo esperaría esperar (pero no lo he probado) DataContractSerializer para que funcione de manera similar; pero sin duda hay ningún daño en el almacenamiento en caché, simplemente, tal vez en un campo de sólo lectura estática

Tenga en cuenta que DataContractSerializer restringe el diseño xml que tiene disponible para usted ... siempre y cuando estás bien con que ;-P

+0

¿Sabe qué restricciones son imposibles para el diseño xml cuando se usa DataContractSerializer? Me gustaría saber solo para asegurarme de que estoy de acuerdo con eso: P –

+1

No hay equivalente de [XmlAttribute], siendo el más obvio. Si su objetivo principal es serializar datos, está bien (al igual que varios otros). Si su objetivo principal es escribir xml en un diseño específico, puede ser problemático. –

Cuestiones relacionadas