Анализ iOS с помощью виртуального трекера.Грязная и резидентная память вызывает предупреждения памяти, что мне делать? - PullRequest
2 голосов
/ 08 ноября 2011


Здравствуйте, сообщество, я пытаюсь отладить то, что я не сделал.Это приложение работает в режиме онлайн и кэширует все содержимое файловой системы, сохраняя все пути (много путей) в памяти (я вижу неправильный подход, но я должен над этим работать).У этого приложения есть опция, которая позволяет загружать все содержимое и заполнять память относительными путями.
Проблема заключается в том, что при выборе этого параметра приложение начинает загрузку и кэширование, но до его завершения происходит сбой.На симуляторе все работает нормально, конечно.
Журнал отчетов о сбоях говорит о предупреждении памяти и о том, что приложение убито jetsam.Отслеживая приложение с распределением по инструментам, я вижу, что «живые» байты «всего лишь» составляют около 7 МБ, этому также помогает использование механизма очистки, добавленного во время загрузки, который освобождает старые пути после завершения загрузки.
Нетвидимых утечек вообще.
Я начал использовать VMTracker и увидел, что резидентная и грязная память довольно высоки с пиками около 61 МБ и 21 МБ.Есть что-то, чего я не получаю.
Я читал много вопросов об этом
Что означают "грязные" и "резидентные" по отношению к виртуальной памяти?
Как я могу избавиться от резидентной грязной памяти в Objective-C?
Но так как я освобождаю большинство путей, созданных, откуда берется другая грязная память?и как мне его почистить?
Спасибо,
Андреа

1 Ответ

6 голосов
/ 08 ноября 2011

Ну, я нашел решение, которое, я думаю, ... выполняя различные тесты, я обнаружил, что, вероятно, соединения что-то кешируют.Итак, я установил NSURLCache 0 байт.Мое приложение теперь, кажется, работает с очень небольшим количеством грязной памяти, почти наполовину.Большие улучшения.Вот две удивительные строки кода.

[[NSURLCache sharedURLCache] setMemoryCapacity:0];
[[NSURLCache sharedURLCache] setDiskCapacity:0];

Как я уже говорил, некоторые разговоры об Apple, грязная память также может представлять кеш данных, я все еще не пробовал устанавливать политику кеширования в запросе URL, но, вероятно, эффект будет таким же.

Надеюсь кому-нибудь помочь.

...