Я написал конвертер, который берет xml-файлы openstreetmap и преобразует их в двоичный формат рендеринга времени выполнения, который обычно составляет около 10% от исходного размера. Размер исходного файла обычно составляет 3 ГБ и больше. Входные файлы не загружаются в память все сразу, а транслируются по мере сбора точек и полигонов, затем на них запускается bsp и файл выводится. В последнее время на больших файлах ему не хватает памяти, и он умирает (у того, о котором идет речь, 14 миллионов точек и 1 миллион полигонов). Обычно моя программа использует от 1 ГБ до 1,2 ГБ оперативной памяти, когда это происходит. Я пытался увеличить виртуальную память с 2 до 8 ГБ (в XP), но это изменение не дало результата. Кроме того, поскольку этот код с открытым исходным кодом, я хотел бы, чтобы он работал независимо от доступной оперативной памяти (хотя и медленнее), он работает на Windows, Linux и Mac.
Какие методы я могу использовать, чтобы избежать нехватки памяти? Обработка данных небольшими подмножествами, а затем объединение окончательных результатов? Используя мой собственный обработчик типа виртуальной памяти? Любые другие идеи?