С# и чтение больших файлов XML
Я знаю, я знаю, что это было сделано до смерти; Я просто отправляю вопрос, чтобы узнать, актуально ли это решение, так как теперь у нас есть .NET 4 и новее
Эта ссылка объясняет простой способ чтения больших файлов XML и реализует Linq. Мне это очень нравится, и я просто хочу, чтобы в простых ответах было указано, актуально ли это, или есть ли лучшие реализации в новом коде .NET.
Ответы
Ответ 1
Ответ на этот вопрос не изменился в .NET 4 - для достижения максимальной производительности вы все равно должны использовать XmlReader, поскольку он передает потоки документ вместо того, чтобы загружать всю вещь в память.
Код, который вы ссылаетесь на использование XmlReader
для фактического запроса, должен быть достаточно быстрым для больших документов.
Ответ 2
Если это выглядит так:
<root>
<item>...</item>
<item>...</item>
...
</root>
вы можете прочитать файл с XmlReader
и каждый "элемент" открыть с помощью XmlDocument
следующим образом:
reader.ReadToDescendant("root");
reader.ReadToDescendant("item");
do
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(reader.ReadOuterXml());
XmlNode item = doc.DocumentElement;
// do your work with `item`
}
while (reader.ReadToNextSibling("item"));
reader.Close();
В этом случае у вас нет ограничений на размер файла.
Ответ 3
Лучший способ сделать это - прочитать его по строкам, используя XmlReader.Create.
var reader = XmlReader.Create(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read())
{
// your code here.
}
Ответ 4
Я боролся с той же проблемой за последние несколько дней. Я просто щелкнул правой кнопкой мыши в свойствах проекта, затем перешел на вкладку Сборка и выберите опцию Любой процессор, отметьте снимите флажок Предпочитаете 32 бит и сохраните его, прежде чем запускать приложение, это помогло мне. Я приложил к нему снимок.
![введите описание изображения здесь]()