Освоив однажды простое последовательное чтение XML, для одноразового считывания XML файлов, я не прибегал к каким то другим способам, до того пока мне не встретилась задача по загрузке данных из "Бешеного" файла.
Задача состояла в том чтоб прочитать одноразово данные выгруженные с сайта (там клиент в течении нескольких лет заполнял описания товара и картинки и т.д. благо синхронизировать можно было по УИД-у) И затянуть их в базу, после чего забыть за эту обработку. И мне не захотелось писать кучу проверок, тем более в этом файле очень часто повторялись имена вложенных узлов, которые обозначали разные поля объекта. Пересмотрев статьи посвященные чтению XML, я пошел по пути наименьшего сопротивления и пришел к XDTO. В основном меня вдохновляла статья от svenderevsky. И на тестовых данных все даже прекрасно заработало, и можно было бы на этом успокоиться и не было бы необходимости создавть эту статью, но как правильно было подмечено Armando все к той же статье, я тоже процитирую:
ИТС: Оптимизация использования оперативной памяти:
Недопустимо работать с большими XML документами с помощью объектов встроенного языка, предназначенных для обработки файлов целиком: текстовые документы в ТекстовыйДокумент, XML в ДокументDOM и HTML в ДокументHTML, а также создавать в памяти XDTO-пакеты размером с весь XML-файл целиком.
В противном случае, весь файл загружается в оперативную память целиком. Исключения составляют отдельные случаи, когда необходим произвольный доступ к содержимому файла, к какой-то конкретной его части.
Следует использовать объекты для последовательной записи и последовательного чтения: ЧтениеXML, ЧтениеТекста, ЗаписьXML, ЗаписьТекста, с помощью которых можно прочитать файл порциями и расходовать память экономно.
При использовании механизмов XDTO неправильно зачитывать в память весь XML-файл целиком (ФабрикаXTDO.ПрочитатьXML(ЧтениеXML)). Вместо этого следует зачитывать XML-файл последовательно, с помощью объекта ЧтениеXML, а его отдельные фрагменты (теги) десериализовывать с помощью фабрики XDTO.
... я как и полагается уже на файле в 300 МБ, уверенно нащупал стандартное 1С-кое "Не достаточно памяти" и аут... Убедился на практике что в XDTO пихать весь файл не хорошо. Но вернусь к цитате с ИТС-а, в ней ведь есть часть ответа, что делать и как. И я вот не нашел реального примера, который бы был прост, без использования XDTO-пакетов, XML-схем и в то же время отвечал требованиям 1С в части оптимизации использования оперативной памяти. И пришлось немного подумать и вот что из этого вышло:
В этом примере XML документ начинает разбираться обычным чтением, пока не дойдет до нужного узла. Этот узел как раз представляет искомый объект, в нашем случае это Номенклатура ( далее как в XML-файле "ПРЕДЛОЖЕНИЕ") и далее файл разбирается уже по узлам, последовательно. Одно предложение за другим. В каждом из предложений, я уже получаю разделенные данные, относящиеся именно к этому объекту(предложению). Скорость работы: 29 000 предложений (а одно предложение содержит кучу реквизитов и свойств часть из них видно на первом скриншоте) на средненьком ноутбуке были разобраны за 1,5 минуты.
В приложенном файле лежат: Обработка - пример читающая данные по вышеописанному алгоритму и XML файл пример содержащий 10 позиций для того чтоб можно было протестировать обработку, и посмотреть более детально на все в отладчике. Обработка писалась под платформой 8.2 для обычных форм.
PS
Возможно, посчитаете это извращением, возможно нет. Оставляйте пожалуйста свое мнение, интересно узнать может этот путь можно было пройти по другому.