Мое приложение может импортировать файлы GPX (XML), а затем я использую замечательную библиотеку XML Dictionary, которая делает фантастическую работу по разбору XML и GPX, но в этом случае у меня есть файл размером 85 МБ, который я хочу попробовать и проанализировать. Он содержит более 16 000 путевых точек GPX, которые огромны.Как разобрать огромный XML-файл, который не исчерпал память
В настоящее время я прочитал NSURL
в NSData
, а затем использовал синтаксический анализатор. Но при попытке с большим файлом я получаю предупреждения о памяти и сбои.
Как я могу разбить синтаксический анализ такого большого файла, чтобы я не получал ошибок памяти?
'XML Dictionary' использует' NSXMLParser'. Что они делают по-другому? –
Прочтите описание на главной странице проекта github. XML Dictionary создает огромное дерево объектов, представляющих весь XML-документ. Все эти дополнительные накладные расходы превышают то, что делает NSXMLParser, что вызывает проблемы с памятью. У вас по существу есть 3 копии файла XML в памяти. 1) Полная 'NSData' всего файла. 2) Гигантское дерево, построенное по XML Dictionary. 3) Ваша собственная модель данных после обработки проанализированного XML. # 1 можно избежать, открыв поток в файл XML, а не загружая весь файл в память. И вы можете избежать # 2, используя только NSXMLParser. – rmaddy
Есть ли какие-нибудь вспомогательные классы, которые делают это? Я не располагаю информацией о том, как открыть поток, используя 'NSXMLParser', как вы упоминаете. –