Задержка завершения iOS-приложения из-за нехватки памяти

0

Я разрабатываю лингвистическое приложение, которое иногда выделяет большой объем памяти в течение определенного периода времени (обычно менее 30 секунд). К сожалению, iOS отправляет предупреждения о низкой памяти и иногда прекращает работу приложения (примерно в 5% случаев). Конечно, я не могу полагаться на шанс, поэтому я должен это исправить. Я пытаюсь оптимизировать алгоритм (он в основном ищет орфографию и звуковые сходства с использованием расстояния Левенштейна), но я боюсь, что использование файловой системы вместо памяти сделает обработку слишком медленной. Есть ли способ реагировать на предупреждения о низкой памяти, если я знаю, что память скоро будет выпущена? Любые другие предложения?

Несколько деталей:

  1. обработка ядра выполняется в фоновом режиме в NSOperation
  2. алгоритм написан в C++ по соображениям производительности, и он использует строки C++ и mallocs.
  3. тот же алгоритм, перенесенный в Objective-C, на 10 раз медленнее, хотя я не исследовал причины
  4. приложение не пропускает память. После длительной обработки вся память правильно выпущена
  5. приложение только для iPad

EDIT: основная часть хранилища - это C++ вектор с английскими словами около 200 тыс. Слов. Я должен сравнить эти слова с некоторыми потенциальными кандидатами как на орфографические, так и фонетические сходства. Для каждого кандидата я должен повторить весь список слов и рассчитать расстояние Левенштейна. Расстояние вычисляется с использованием матрицы подобия, которая статически выделяется в функции. Я все еще озадачен тем, почему я начинаю с словаря, который составляет около 2 МБ и заканчивается 70+ МБ живых байтов во время обработки.

  • 1
    Возможно, если бы вы объяснили, хотя бы в общих чертах, для чего все это хранилище, это помогло бы.
  • 0
    Я думаю, что mmap не считается используемой памятью, вы можете попробовать это, чтобы обойти ограничение
Показать ещё 5 комментариев
Теги:
memory

1 ответ

0
Лучший ответ
  1. Вы не можете обойти ОС, заканчивающую ваше приложение, если оно занимает слишком много памяти. Лучшее, что вы можете сделать, это бесплатно, что не нужно, когда вы получаете предупреждения о низкой памяти и надеетесь, что вас не сбивают. Помните, что в iOS все приложения используют одну и ту же физическую память, и нет обмена, поэтому 70 МБ много.

  2. Если вы не знаете, почему ваше приложение занимает столько памяти, попробуйте использовать инструмент Allocations для его профилирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню