He heredado un proyecto en el que el modelo de datos de la aplicación es un documento XML. Los desarrolladores antes que yo habían creado un modelo de objetos basado en el esquema de este xml, y luego se codificaron contra el modelo de objetos.XML La serialización es lenta
Después de varios años de mantenimiento, esta aplicación ha comenzado gradualmente a mostrar su edad. El líder del equipo ha dicho que la razón clave detrás de esto se debe a la 'lentitud' de la serialización xml. Estoy tentado de llamar a BS sobre esto, pero muchos de los archivos xml con los que tratamos tienen más de 2MB de tamaño, y teniendo en cuenta los conceptos básicos de lo que ocurre detrás de las escenas con objetos marcados [Serializable]
, 2MB es mucho para reflejar entonces podría haber algo de verdad en la teoría de la lentitud.
En su experiencia, ¿la serialización es tan "lenta"/mala como para optar por un modelo XML -> XPath en lugar de un XML -> modelo POCO?
BTW este es un proyecto .NET 2.0, y nuestros clientes podrían actualizarse a .NET 3.5 en algún momento a finales del próximo año.
+1 gran respuesta. Por otro lado, recuerdo haber visto algunos puntos de referencia en DataContractSerializer que mostraban que, en promedio, era aproximadamente un 10% más rápido que el XmlSerializer. – womp
-1 Porque la serialización XML * definitivamente * usa Reflection; no hay forma de que pueda obtener detalles de tipo * a menos que * use Reflection. Ahora, estos detalles no tienen que ser usados * repetidamente * pero deben ser obtenidos en primer lugar. Además, 'DataContractSerializer' es * no * parte de WCF; WCF aprovecha mucho, pero se encuentra fuera de WCF (en su propio espacio de nombres y su propio conjunto). – casperOne
@casperOne El serializador XML utiliza la reflexión como dijiste la primera vez, suponiendo que estás llamando a los constructores correctos, almacenará en caché el ensamblaje resultante. Creo que también puede generar esto en tiempo de compilación – JoshBerke