2009-03-03 3 views
17

. Framework .Net теперь имеет (по крайней мере) четыре разных метода чтения строки Xml. Я использовал каждый из XmlDocument, XmlReader, XPath и XElement, но который наиболее эффективен для использования при кодировании или во время выполнения? Каждый из них предназначен для другой задачи, каковы плюсы и минусы?Самый эффективный способ разбора Xml


Update: Использование XmlReader, кажется, самый быстрый способ чтения XML, которые звучат разумно для меня, но имеет свои ограничения. Я хотел бы знать, есть ли разница в производительности между XmlDocument и XLinq для беспрепятственного доступа к xml.


Update: Я нашел несколько постов, сравнивающих различные способы загрузки документа XML. XmlReader является самым быстрым, существует незначительная разница между XmlDocument и LINQ to XML, пока вы не загрузите документ с более чем 100 000 узлов, где LINQ to XML выходит спереди.

ответ

12

Три наиболее распространенные методы для чтения являются:

XmlDocument Он читает весь файл в виде древовидной структуры, которые затем могут быть доступны с помощью XPath или при просмотре всех узлов. Это требует большой памяти для очень большого файла, так как вся структура XML должна быть загружена в память. Очень хороший и простой в использовании для небольших файлов (менее нескольких мегабайт).

XmlReader Быстрая, но также настоящая боль для использования, поскольку она последовательна. Если вам когда-нибудь понадобится вернуться, вы не можете, и структура XML обычно очень подвержена дезорганизованным заказам. Кроме того, если вы читаете из бесконечного потока XML, это, вероятно, единственный путь.

XML сериализаторов Это в основном делает все для вас, вы предоставляете корневой объект вашей модели, и это создает и читать XML для вас. Тем не менее, вы почти не контролируете структуру, и чтение старых версий вашего объекта - боль. Таким образом, это не будет работать очень хорошо для сопротивления.

XDocument и LINQ to XML Как указал Даниэль Прям. Но я не знаю этого достаточно, чтобы прокомментировать. Я предлагаю кому-либо отредактировать сообщение и добавить недостающую информацию.


Теперь письмо - это еще одна история. Это боль для поддержки XmlDocument, а XmlWriter - легкий ветерок.

Я бы сказал, по моему опыту, что лучшим комбо является запись с использованием XmlWriter и чтение с использованием XmlDocument.

4

Самый быстрый из них будет XmlTextReader. От MSDN:

«Представляет читателя, который обеспечивает быстрый, не кэшированный, только прямой доступ доступ к данным XML».

Подробнее здесь: XmlTextReader Class

Хотя это действительно зависит от задачи, чтобы решить, какой «метод» было бы наиболее подходящей для использования. Если вам нужно прочитать XML-файл только один раз (например: чтение и кеширование некоторых глобальных параметров приложения и т. Д.), То победитель XmlTextReader. Но помните, что это читатель только для чтения. Если вам нужно искать/изменять все-над XML, то вы, вероятно, должны использовать XmlDocument Class.

+0

-1: 'XmlTextReader' не следует использовать напрямую. Используйте 'XmlReader.Create' для создания' XmlReader'. –

5

Существует также XDocument и LINQ to XML, который я считаю наиболее эффективным, когда дело доходит до времени программиста.

+0

Любая идея, как XDocument выполняет по сравнению с XmlDocument? – bstoney

+0

Не знаю. Обычно я не разбираюсь в каких-либо наборах данных, достаточно больших для обеспечения производительности. –