Чтение XML с диска по одной записи за раз с памятью - PullRequest
0 голосов
/ 08 августа 2011

Я пытаюсь выполнить сортировку слиянием на отсортированных кусках файлов XML на дисках.Нет шансов, что они все уместятся в памяти.Мои XML-файлы состоят из записей.

Скажем, у меня есть файлы XML.Если бы у меня было достаточно памяти, я бы считал все содержимое каждого файла в очередь для соответствующего кодирования, по одной очереди для каждого файла, сравнил временную метку для каждого элемента в каждой очереди и вывел бы метку с наименьшей временной меткой в ​​другой файл (файл слияния),Таким образом, я объединяю все маленькие файлы в один большой файл со всеми записями, отсортированными по времени.

Проблема в том, что у меня недостаточно памяти для чтения всего XML с помощью .ReadToEnd для последующей передачи.Метод синтаксического анализа XDocument.

Существует ли чистый способ прочитать достаточно записей, чтобы заполнить каждую из очередей для следующего прохода, сравнивая их атрибут XElement «TimeStamp», запоминая, какой XElement с диска он прочитал?

Спасибо.

Ответы [ 3 ]

1 голос
/ 08 августа 2011

Так что это вышло из моды, но это именно та проблема, которая решается с помощью SAX.Это простой API для XML, основанный на обратных вызовах.Вы запускаете операцию чтения, и ваш код вызывается для каждой записи.Это может быть опцией, так как для этого не требуется, чтобы программа загружалась во всем XML-файле (аля XMLDocument).Google SAX.

1 голос
/ 08 августа 2011

An XmlReader - это то, что вы ищете.

Представляет читателя, который обеспечивает быстрый, без кэширования, только для пересылки доступ к данным XML.

0 голосов
/ 08 августа 2011

Если вам нравится linq to xml api, этот проект codeplex может удовлетворить ваши потребности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...