Анализ iOS с помощью VM tracker. Грязная и резидентная память вызывает предупреждения о памяти, что мне делать?


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


person Andrea    schedule 08.11.2011    source источник


Ответы (1)


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

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

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

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

person Andrea    schedule 08.11.2011