2009-08-28 12 views
5

Mam dość duży plik XML, który muszę przeanalizować w strukturze klasy .NET (do mapowania w formacie rekordu o stałej długości i przesyłany przez MQ). Wydajność jest ważna, ale nie absolutnie krytyczna.Jak duża jest różnica prędkości między XPathNavigator i XmlReader, naprawdę?

Niemal zawsze używam XPathNavigator do odczytywania plików XML, ponieważ jest to znacznie łatwiejsze niż XmlReader. Z drugiej strony, wiem, że XmlReader jest szybszy niż XPathNavigator, ponieważ teoretycznie czyta tylko jeden węzeł na raz, podczas gdy XPathNavigator musi przeczytać wystarczająco dużo, aby wykonać XPath, być może cały dokument.

Moje pytanie brzmi: ile szybciej jest naprawdę? Czy zauważy różnicę podczas czytania kilku tysięcy węzłów? Jaka jest przewaga, w której muszę przejść na XmlReader? Czy jest to XPathNavigator zoptymalizowane do tego stopnia, że ​​zawsze jest dobrym rozwiązaniem?

Większość moich doświadczeń z XMLem dotyczy stosunkowo małych plików, dlatego szukam informacji od każdego, kto pracował z dużymi plikami.

Odpowiedz

5

O ile mi wiadomo, jedynymi miejscami, w których można uzyskać implementację XPathNavigator, są pliki .Xml.Linq.XDocument lub XPathDocument, z których oba przechowują całe drzewo w pamięci.

Z drugiej strony XmlReader może pobrać i przeanalizować strumień XML bez potrzeby gromadzenia zestawu węzłów w drzewie.

Zatem zakładając, że zebranie wszystkich wymaganych danych w przód jedyny sposób, to dla dużych zbiorów danych XmlReader powinno się wykonać XPathNavigator tylko na tej podstawie, że: -

  1. Można by musiało deserialise strumień XML i tak do wypełnienia dokumentu i
  2. Nie trzeba ładować dużego zestawu elementów do pamięci.
Powiązane problemy