Насколько велика разница в скорости между XPathNavigator и XmlReader? - PullRequest
5 голосов
/ 29 августа 2009

У меня есть довольно большой XML-файл, который мне нужно проанализировать в структуре классов .NET (для сопоставления с форматом записи фиксированной длины и передачи через MQ). Производительность важна, но не абсолютно критична.

Я почти всегда использую XPathNavigator для чтения XML-файлов, потому что это намного проще, чем XmlReader. С другой стороны, я знаю, что XmlReader быстрее, чем XPathNavigator, потому что теоретически он читает только один узел за раз, тогда как XPathNavigator должен читать достаточно для выполнения XPath, возможно, всего документа.

Мой вопрос: насколько быстрее это на самом деле? Будет ли это заметно при чтении нескольких тысяч узлов? Что за переломный момент, когда мне приходится переключаться на XmlReader? Или XPathNavigator оптимизирован до такой степени, что это всегда хороший вариант?

Большая часть моего опыта работы с XML связана с относительно небольшими файлами, поэтому я ищу информацию от всех, кто работал с большими файлами.

1 Ответ

5 голосов
/ 29 августа 2009

Насколько мне известно, единственные места, где вы можете получить реализацию XPathNavigator, - это либо .Xml.Linq.XDocument, либо XPathDocument, оба из которых содержат все дерево в памяти.

С другой стороны, XmlReader может извлекать и анализировать поток XML без необходимости собирать набор узлов в дерево.

Следовательно, при условии, что вы собираете все необходимые данные только для прямой передачи, тогда для больших наборов данных XmlReader должен выполнить XPathNavigator просто на том основании, что: -

  1. В любом случае вам пришлось бы десериализовать поток XML для заполнения документа и
  2. Вам не нужно загружать большой набор элементов в память.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...