XPathDocument загружает целый xml документ?

Если я делаю

XPathDocument doc = new XPathDocument("filename.xml");

Это загружает весь документ в память? Я пишу приложение для мобильного телефона, и документ мог бы хранить много данных, которому никогда не нужно ко всем быть загруженным одновременно. Мобильные телефоны обычно не имеют слишком большого количества поршня!

6
задан Wires 9 April 2010 в 18:04
поделиться

5 ответов

Да, весь XML-документ представлен в памяти .

Одно из решений - разбить большой XML-документ на множество более мелких.

Или, в качестве альтернативы, вы можете написать свой собственный XmlReader , который будет игнорировать нежелательные поддеревья. Вы можете передать этот XmlReader в качестве аргумента конструктору XpathDocument () - необходимо замаскировать его как TextReader .

5
ответ дан 16 December 2019 в 21:37
поделиться

https://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathdocument.aspx

"Обеспечивает быстрое , доступное только для чтения представление XML-документа в памяти с использованием модели данных XPath. "

1
ответ дан 16 December 2019 в 21:37
поделиться

Вы, вероятно, захотите что-то более похожее на System.Xml.XmlReader .

2
ответ дан 16 December 2019 в 21:37
поделиться

Возможно, вы захотите посмотреть XStreamingElement LINQ to XML:

Представляет элементы в дереве XML, которое поддерживает отложенный потоковый вывод.

Этот класс позволяет вам создать дерево XML , которое поддерживает отложенный потоковый вывод. Вы используете этот класс для создания XML-дерева очень похожим образом на создание XML-дерева с помощью XElement. Однако есть принципиальная разница. Когда вы используете запрос LINQ для указания содержимого при создании XML-дерева с помощью XElement, переменная запроса повторяется во время создания XML tree, и результаты запроса добавляются в XML-дерево. Напротив, когда вы создаете дерево XML с помощью XStreamingElement, ссылка на переменную запроса сохраняется в дереве XML без итерации. Запросы повторяются только после сериализации. Это позволяет создавать деревья XML большего размера, сохраняя при этом меньший объем памяти .

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

1
ответ дан 16 December 2019 в 21:37
поделиться

Вы можете попробовать другой конструктор XPathDocument (stream) . Потоковая передача документа не займет много памяти.

Возможно, вам не стоит обращать внимание на Linq to XML , так как это проще и быстрее кодировать и делать более красивый код, чем использовать синтаксический анализ SAX / DOM. См. Это сообщение: Как хранить данные без использования базы данных и как их получать?

-1
ответ дан 16 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: