Нахождение заброшенной памяти
Обнаружьте от которой отказываются и неиспользованную память, выделенную Вашим приложением с помощью инструмента Выделений. Выпуск этой памяти увеличивает эффективность памяти, повышая качество Вашего приложения.
В Инструментальном аналитическом инструменте откройте шаблон Allocations.
От Выбрать всплывающего меню Target выберите свое приложение.
Нажмите Кнопку записи.
Выберите инспектора Настроек Дисплея в области боковой панели.
Выполните действие или короткую последовательность в Вашем приложении, которое можно повторить, и это запускается и заканчивается в том же состоянии.
После одной итерации повторимого действия нажмите кнопку Mark Generation на боковой панели инспектора для взятия снимка «кучи».
Повторяйте шаги 5 и 6 несколько раз, пока Вы не видите, растет ли «куча» без предела; тогда щелкните по Кнопке остановки.
Проанализируйте объекты, полученные снимком «кучи» для определения местоположения памяти, от которой отказываются.
Процесс, описанный здесь для нахождения заброшенной памяти, вызывают “анализом поколений” и основывается на предпосылке, что каждая «генерация» объектов, создаваемых во время сценария, должна быть пропорциональна долгосрочным последствиям того сценария на состоянии программы. Если это открывает и закрывает окно, например, то объекты в той генерации должны в конечном счете быть уничтожены. Если это добавляет новый контакт к адресной книге, то объекты кроме нового контакта и его свойств должны в конечном счете быть уничтожены.
Существует несколько типов постоянной памяти, взятых этим аналитическим методом:
Пропущенная память: Память, не имеющая ссылки Вашим приложением, которое не может использоваться снова или освобождаться (также обнаруживаемый при помощи инструмента Утечек).
Заброшенная память: Память, на которую все еще ссылается Ваше приложение, не имеющее никакой полезной цели.
Кэшируемая память: Память, на которую все еще ссылается Ваше приложение, которое могло бы использоваться снова для лучшей производительности.
Для предотвращения отказывавшийся от памяти удостоверьтесь, что «куча» не продолжает расти, когда постоянно повторяется тот же набор операций. Например, действия, такие как открытие окна и затем сразу закрытие его, или установка предпочтения и затем сразу сбрасывание его, должны возвратить приложение предыдущему и стабильному состоянию памяти. Обширное циклическое повторение через такие операции не должно приводить к неограниченному росту «кучи».
Чтобы гарантировать, что ни один из Вашего кода не отказывается от памяти, повторите пользовательские сценарии и используйте функцию Mark Generations после каждой итерации. После первых нескольких итераций (где кэши могут быть нагреты), постоянная память этих итераций должна упасть на нуль. Если постоянная память все еще накапливается, щелкните по стрелке фокуса для наблюдения дерева вызова памяти. Это дерево идентифицирует, какие пути выполнения кода ответственны за выделения, от которых в конечном счете отказываются. Ваш код окрашен в черный в отслеживании стека. Удостоверьтесь, что Ваши сценарии осуществляют весь Ваш код, выделяющий память.
Если «куча» продолжает расти после первых нескольких итераций цикла Вы знаете, что Ваше приложение отказывается от памяти. Найдите снимок «кучи», кажущийся представительным для повторного роста «кучи». Щелкните по кнопке фокусировки направо от имени снимка «кучи» к экранным объектам, создаваемым во время того диапазона времени, которые все еще живут в конце выполнения программы.
После остановки трассировки можно все еще взять снимки путем перетаскивания инспекционной головы во временной шкале окна трассировки туда, где Вы хотите Mark Generations щелчка и снимок.