Каков наилучший способ анализа большого XML (размером 1 ГБ) в C #? - PullRequest
13 голосов
/ 22 января 2009

У меня есть XML-файл объемом 1 ГБ, и я хочу его проанализировать. Если я использую XML Textreader или XMLDocument, результат будет очень медленным и иногда зависает ...

Ответы [ 5 ]

12 голосов
/ 22 января 2009

Вам нужно будет реализовать собственную логику с помощью xmlreader. xmlreader не загружает полный XML в память перед его использованием, а это означает, что вы можете прочитать его из потока и обработать как таковой.

8 голосов
/ 22 января 2009

XmlDocument в этом сценарии невозможен, так как он попытается высосать этот гигабайт в основную память. Я удивлен, что вы находите XmlTextReader слишком медленным. Вы пробовали что-то вроде следующего?

using (XmlTextReader rdr = new XmlTextReader("MyBigFile.txt"))
{
     // use rdr to advance through the document.
}
6 голосов
/ 22 января 2009

XMLTextreader не должен зависать, поскольку он основан на потоке и работает только с кусками данных.

Если он зависает, вполне возможно, что вы делаете что-то не так при загрузке файла.

1 голос
/ 22 января 2009

Я бы хотел поддержать всех, кто продвигает XmlReader, с помощью сравнения производительности, которое я нашел:

http://www.nearinfinity.com/blogs/joe_ferner/performance_linq_to_sql_vs.html

1 голос
/ 22 января 2009

Я не очень знаком с этой темой, но на деле классы XmlReader должны нормально работать для вашей конкретной проблемы. В конце концов, они оптимизированы именно для этого.

...