track tag attribute .net xml performance linq-to-xml

.net - tag - tooltip title



La forma más eficiente de analizar Xml (3)

El marco .Net ahora tiene (al menos) cuatro métodos diferentes para leer una cadena Xml. He usado cada uno de XmlDocument, XmlReader, XPath y XElement, pero ¿cuál es el más eficiente de usar al codificar o durante la ejecución? ¿Cada uno está diseñado para una tarea diferente, cuáles son los pros y los contras?

Actualización: usar un XmlReader parece ser la forma más rápida de leer xml, lo que me parece razonable, pero tiene sus limitaciones. Me gustaría saber si hay alguna diferencia de rendimiento entre XmlDocument y XLinq para acceder a xml de forma no secuencial.

Actualización: encontré algunas publicaciones que comparaban los diferentes métodos para cargar un documento xml. XmlReader es el más rápido, hay una diferencia insignificante entre XmlDocument y LINQ a XML hasta que cargue un documento con más de 10,000 nodos donde LINQ to XML aparece al frente.


Los tres métodos más comunes para leer son:

XmlDocument Lee todo el archivo en una estructura de árbol a la que luego se puede acceder mediante XPath o explorando todos los nodos. Requiere mucha memoria para archivos muy grandes ya que toda la estructura XML se debe cargar en la memoria. Muy bueno y simple de usar para archivos más pequeños (menos de unos pocos megas).

XmlReader Fast, pero también es un verdadero dolor de usar ya que es secuencial. Si alguna vez necesita volver, no puede, y la estructura XML suele ser muy propensa a tener pedidos desorganizados. Además, si lees desde una secuencia de XML no final, esta es probablemente la única manera de hacerlo.

Serializadores XML Esto básicamente hace todo por usted, usted proporciona el objeto raíz de su modelo y crea y lee el XML por usted. Sin embargo, casi no tiene control sobre la estructura, y leer versiones anteriores de su objeto es un dolor. Así que esto no funcionará muy bien para la persistencia.

XDocument y LINQ to XML como señaló Daniel Straight. Pero no sé lo suficiente como para comentar. Invito a cualquiera a editar la publicación y agregar la información que falta.

Ahora escribir es otra historia. Es un dolor mantener un XmlDocument y XmlWriter es muy fácil de usar.

Yo diría, desde mi experiencia, que el mejor combo es escribir usando XmlWriter y leer usando XmlDocument.


También están XDocument y LINQ to XML, que considero que son los más eficientes a la hora de programar.


El más rápido sería XmlTextReader . Desde MSDN:

"Representa un lector que proporciona acceso rápido, no en caché, solo hacia adelante a datos XML".

Más aquí: XmlTextReader Class

Aunque realmente depende del problema decidir qué "método" sería el más apropiado para su uso. Si necesita leer un archivo XML solo una vez (p. Ej., Leer y almacenar en caché algunas configuraciones globales de aplicaciones, etc.), entonces XmlTextReader es el ganador. Pero recuerde, es solo para leer hacia adelante. Si necesita buscar / modificar todo el XML, entonces probablemente debería usar XmlDocument Class .