2009-08-28 11 views
5

Tengo un archivo XML bastante grande que necesito analizar en una estructura de clase .NET (para ser mapeado a un formato de registro de longitud fija y transmitido a través de MQ). El rendimiento es importante, pero no absolutamente crítico.¿Cuán grande es la diferencia de velocidad entre XPathNavigator y XmlReader, realmente?

Casi siempre uso XPathNavigator para leer archivos XML porque es mucho más fácil que XmlReader. Por otro lado, sé que XmlReader es más rápido que XPathNavigator, porque teóricamente solo lee un nodo a la vez, mientras que XPathNavigator tiene que leer lo suficiente para ejecutar un XPath, posiblemente todo el documento.

Mi pregunta es: ¿cuánto más rápido es realmente? ¿Hará una diferencia notable al leer unos miles de nodos? ¿Cuál es el punto de inflexión en el que casi tengo que cambiar a XmlReader? ¿O está optimizado el XPathNavigator hasta el punto de que siempre es una buena opción?

La mayor parte de mi experiencia en XML se basa en archivos relativamente pequeños, por lo que estoy buscando la opinión de cualquier persona que haya trabajado con archivos grandes.

Respuesta

5

Por lo que sé, los únicos lugares donde puede obtener una implementación de XPathNavigator son de .Xml.Linq.XDocument o XPathDocument, que mantienen todo el árbol en la memoria.

El XmlReader por otro lado puede recuperar y analizar una secuencia de XML sin la necesidad de recopilar un conjunto de nodos en un árbol.

Por lo tanto asumiendo que se reúnen todos los datos requeridos en un sólo hacia adelante manera, entonces para grandes conjuntos de datos XmlReader debe a cabo realizar XPathNavigator simplemente sobre la base de que: -

  1. Usted habría tenido que deserialise una corriente de XML de todos modos para completar un documento y
  2. No tendría que cargar un gran conjunto de elementos en la memoria.
Cuestiones relacionadas