2009-05-13 15 views
5

En una de las aplicaciones que estamos desarrollando, hacemos gran cantidad de procesamiento de XML. Actualmente usamos DOM y XPath para la mayoría del procesamiento y no estamos muy contentos con el rendimiento.Linq a XML vs DOM

Por el momento estamos considerando mover la lógica de procesamiento XML a LINQ y nuestras investigaciones iniciales sugieren que el rendimiento LINQ es mucho mejor que el DOM.

Antes de hacer estos cambios, me gustaría saber cómo se sienten los demás al respecto. ¿El uso de LINQ es una mejor opción? Cualquier disavantages etc ...

Gracias, Shamika


Muchas gracias por sus respuestas. Hice algunas pruebas de rendimiento y, como era de esperar, XmlReader realizó tanto XmlDocument como LINQ. Tenga en cuenta que esto es solo para leer XML.

Además, si necesita la facilidad de uso de LINQ, puede implementar el procesamiento LINQ XML utilizando algunas características de XmlReader y puede obtener un rendimiento mucho mejor que XmlDocument. Consulte los comentarios "rwwilden" para obtener más información.

Gracias.

+0

Eche un vistazo a esta pregunta: http: // stackoverflow.com/questions/182976 –

Respuesta

1

Mi opinión es que LINQ -> XML es más fácil de usar que DOM. Es más intuitivo para mí y mucho más fácil de leer IMO.

2

No estoy seguro de que notaría una mejora de rendimiento muy grande con LINQ2XML en lugar de DOM/XPath. Para DOM y LINQ2XML, el documento sobre el que itera se representa como un árbol en memoria.

Si el rendimiento realmente es un problema y tiene documentos XML bastante grandes, puede echar un vistazo al soporte de transmisión XML rudimentario que se implementa en el marco (a través de XStreamingElement). También consulte este equipo XML de Microsoft blog entry.

3

Es probable que usar DOM (es decir, System.Xml.XmlDocument) sea más lento, debido al rico soporte de navegación (todas esas referencias comienzan a acumularse), y esta sobrecarga aumentará a medida que aumente el número de nodos.

Los modelos de objetos simples (System.Xml.Linq.XDocument y System.Xml.XPath.XPathDocument) no tienen estructuras tan complejas, pero permiten la navegación por otros medios. Esto podría agregarse a la sobrecarga de la CPU pero debería ahorrar memoria.

Al final, necesita un perfil (tiempo y espacio) en su caso, y también considerar la diferencia real (percibida por el usuario) que hace.

Pero, para un rendimiento máximo, no cargue todo el documento en la memoria en absoluto: use System.Xml.XmlReader y System.Xml.XmlWriter y haga todo en una secuencia. Por supuesto, esto agrega un costo de desarrollo.

.NET tiene un conjunto rico (tal vez demasiado rico) de API de XML, que es el mejor (o al menos, el peor) para usted puede determinarlo haciendo las concesiones que son mejores para usted.

Personalmente yo evitaría XmlDocument y utilizar XPathDocument (especialmente de leer, y consulta con XPath) o XDocument (sobre todo para crear), donde XmlReader/XmlWriter no da lo suficiente de un aumento de rendimiento de justificar.