Мне нужно сделать некоторую обработку на довольно больших XML файлах (больших здесь, возможно, выше гигабайта) на С#, включая выполнение сложных запросов xpath. Проблема в том, что стандартный способ, которым я обычно это делал, в библиотеках System.XML нравится загружать весь файл в память, прежде чем он что-либо с ним сделает, что может вызвать проблемы с памятью с файлами такого размера.
Мне не нужно обновлять файлы, просто читая их и запрашивая данные, содержащиеся в них. Некоторые из запросов XPath весьма привлекательны и охватывают несколько уровней отношения типа "родитель-ребенок" - я не уверен, повлияет ли это на возможность использования средства чтения с потоком, а не на загрузку данных в память в виде блока.
Один из способов, с помощью которого я могу работать, - выполнить простой анализ с использованием потокового подхода и, возможно, обернуть операторы XPath в XSLT-преобразования, которые я мог бы запустить по файлам позже, хотя это кажется немного запутанным.
В качестве альтернативы я знаю, что есть некоторые элементы, которые запросы XPath не будут выполняться, поэтому я предполагаю, что я мог бы разбить документ на несколько меньших фрагментов на основе исходной древовидной структуры, которая может быть достаточно мала для обработки в памяти, не вызывая слишком много хаоса.
Я попытался объяснить свою цель здесь, так что, если я полностью подкражу неправильное дерево с точки зрения общего подхода, я уверен, что вы, люди, можете меня правильно...