С# и чтение больших файлов 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 бит и сохраните его, прежде чем запускать приложение, это помогло мне. Я приложил к нему снимок. введите описание изображения здесь