Самый эффективный способ парсить Xml

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


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


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


person bstoney    schedule 03.03.2009    source источник


Ответы (3)


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

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

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

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

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


Теперь писать — это отдельная история. Поддерживать XmlDocument очень сложно, а XmlWriter очень прост в использовании.

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

person Community    schedule 03.03.2009

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

person Instance Hunter    schedule 03.03.2009
comment
Есть идеи, как XDocument работает по сравнению с XmlDocument? - person bstoney; 03.03.2009
comment
Я не знаю. Обычно я не имею дело с какими-либо наборами данных, достаточно большими, чтобы производительность имела значение. - person Instance Hunter; 03.03.2009

Самым быстрым будет XmlTextReader. Из MSDN:

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

Подробнее здесь: Класс XmlTextReader

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

person sabiland    schedule 03.03.2009
comment
-1: XmlTextReader не следует использовать напрямую. Используйте XmlReader.Create для создания XmlReader. - person John Saunders; 08.10.2011