Я разрабатываю лингвистическое приложение, которое иногда выделяет большой объем памяти в течение определенного периода времени (обычно менее 30 секунд). К сожалению, iOS отправляет предупреждения о низкой памяти и иногда прекращает работу приложения (примерно в 5% случаев). Конечно, я не могу полагаться на шанс, поэтому я должен это исправить. Я пытаюсь оптимизировать алгоритм (он в основном ищет орфографию и звуковые сходства с использованием расстояния Левенштейна), но я боюсь, что использование файловой системы вместо памяти сделает обработку слишком медленной. Есть ли способ реагировать на предупреждения о низкой памяти, если я знаю, что память скоро будет выпущена? Любые другие предложения?
Несколько деталей:
EDIT: основная часть хранилища - это C++ вектор с английскими словами около 200 тыс. Слов. Я должен сравнить эти слова с некоторыми потенциальными кандидатами как на орфографические, так и фонетические сходства. Для каждого кандидата я должен повторить весь список слов и рассчитать расстояние Левенштейна. Расстояние вычисляется с использованием матрицы подобия, которая статически выделяется в функции. Я все еще озадачен тем, почему я начинаю с словаря, который составляет около 2 МБ и заканчивается 70+ МБ живых байтов во время обработки.
Вы не можете обойти ОС, заканчивающую ваше приложение, если оно занимает слишком много памяти. Лучшее, что вы можете сделать, это бесплатно, что не нужно, когда вы получаете предупреждения о низкой памяти и надеетесь, что вас не сбивают. Помните, что в iOS все приложения используют одну и ту же физическую память, и нет обмена, поэтому 70 МБ много.
Если вы не знаете, почему ваше приложение занимает столько памяти, попробуйте использовать инструмент Allocations для его профилирования.
mmap
не считается используемой памятью, вы можете попробовать это, чтобы обойти ограничение