2009-08-28 4 views
5

Ich habe eine ziemlich große XML-Datei, die ich in eine .NET-Klassenstruktur analysieren muss (um sie einem Format mit fester Länge zuzuordnen und über MQ zu übertragen). Leistung ist wichtig, aber nicht absolut kritisch.Wie groß ist der Geschwindigkeitsunterschied zwischen XPathNavigator und XmlReader wirklich?

Ich verwende fast immer XPathNavigator zum Lesen von XML-Dateien, weil es viel einfacher ist als XmlReader. Auf der anderen Seite, ich weiß XmlReader ist schneller als XPathNavigator, weil es theoretisch liest nur einen Knoten zu einer Zeit, während XPathNavigator muss genug, um einen XPath, möglicherweise das gesamte Dokument ausführen zu lesen.

Meine Frage ist: Wie viel schneller ist es wirklich? Wird es beim Lesen von ein paar tausend Knoten einen spürbaren Unterschied machen? Was ist der Wendepunkt, an dem ich so ziemlich auf XmlReader wechseln muss? Oder ist XPathNavigator so optimiert, dass es immer eine gute Option ist?

Die meisten meiner XML-Erfahrung ist auf relativ kleinen Dateien, so bin ich auf der Suche nach Input von jedem, der mit großen Dateien gearbeitet hat.

Antwort

5

Soweit mir bekannt ist, sind die einzigen Stellen, an denen Sie eine XPathNavigator-Implementierung erhalten können, entweder von .Xml.Linq.XDocument oder XPathDocument, die beide den gesamten Baum im Speicher halten.

Der XmlReader dagegen kann einen XML-Stream abrufen und parsen, ohne dass eine Gruppe von Knoten in einer Struktur gesammelt werden muss.

daher vorausgesetzt, Sie alle erforderlichen Daten in einer Vorwärts nur Art und Weise zu sammeln, dann für große Datenmengen XmlReader sollte aus XPathNavigator einfach auf der Grundlage durchzuführen, dass: -

  1. Sie würden einen Strom mussten deserialise XML sowieso, um ein Dokument zu füllen und
  2. Sie müssten nicht eine große Menge von Elementen in den Speicher laden.
Verwandte Themen