Чтение больших XML-документов в .net - PullRequest
12 голосов
/ 06 октября 2011

Мне нужно читать большие XML-файлы, используя файлы .net, размер которых может быть несколько ГБ.

Я пытался использовать XDocument, но он просто выдает исключение System.OutOfMemoryException при попытке загрузить документ.

Какой самый эффективный способ чтения XML-файлов большого размера?

Ответы [ 3 ]

13 голосов
/ 06 октября 2011

У вас в основном есть , чтобы использовать модель "тянуть" здесь - XmlReader и друзья.Это позволит вам выполнять потоковую передачу документа, а не загружать его в память за один раз.

Обратите внимание, что если вы знаете, что находитесь в начале "достаточно маленького" элемента, вы можете создать XElement из XmlReader, разберитесь с этим, используя славу LINQ to XML, а затем перейдите к следующему элементу.

5 голосов
/ 06 октября 2011

Следующая страница делает интересное чтение, предоставляя средства для извлечения данных из файла XML без загрузки их в память.Он позволяет объединить скорость XmlReader с гибкостью Linq:

http://msdn.microsoft.com/en-us/library/bb387035.aspx

И довольно интересную статью, основанную на этой технике:

http://blogs.msdn.com/b/xmlteam/archive/2007/03/24/streaming-with-linq-to-xml-part-2.aspx

0 голосов
/ 06 октября 2011

Вы можете попробовать использовать XmlTextReader экземпляр.

http://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.aspx

...