Самый эффективный способ разбора Xml - PullRequest
17 голосов
/ 03 марта 2009

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


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


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

Ответы [ 3 ]

13 голосов
/ 03 марта 2009

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

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

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

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

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


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

Исходя из моего опыта, я бы сказал, что лучшая комбинация - писать с использованием XmlWriter и читать с использованием XmlDocument.

5 голосов
/ 03 марта 2009

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

4 голосов
/ 03 марта 2009

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

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

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

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

...