Как профилировать использование памяти и производительность с помощью инструментов?

Из всех шаблонов трассировки инструментов мне нравится использовать:

  • Зомби для обнаружения чрезмерного высвобождения объекта, отлично подходит для отладки EXEC_BAD_ACCESS ошибок.
  • Утечки для обнаружения утечек памяти.
  • Базовая анимация w Слои со смешанными цветами для определения частоты кадров и полупрозрачных подвидов, отлично подходит для сглаживания UITableView прокрутки.

Я всегда слышу, как люди говорят профилировать использование памяти и производительность моего приложения.

  1. Зачем мне профилировать использование памяти и производительность? Мое приложение работает нормально.
  2. Как это сделать?

Я использовал Allocations и увидел, что мое приложение для iPhone начинается с 1 МБ общей выделенной памяти и увеличивается до 5 МБ после нормального использования. Что на iPhone слишком много памяти? iPad? Mac?


person ma11hew28    schedule 10.07.2011    source источник


Ответы (3)


Чтобы ответить на вопрос, почему, профилирование использования памяти особенно важно для приложений iOS, потому что iPhone и iPad имеют гораздо меньше оперативной памяти, чем Mac. У iPhone 4 512 МБ оперативной памяти, но в более ранних версиях было 256 или 128 МБ. С учетом оперативной памяти, которую использует ОС, и многозадачности, у вашего приложения не так много оперативной памяти, которую можно тратить впустую, поэтому важно знать, сколько памяти использует ваше приложение.

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

Чтобы ответить на вопрос, как, используйте инструмент Allocations для измерения использования памяти. Столбец Live Bytes в категории All Allocations показывает объем памяти, который ваше приложение использует в настоящее время. Анализ кучи, проводимый инструментом Allocations, измеряет рост памяти в вашем приложении. Используйте меню в левой части панели перехода, чтобы выполнить анализ кучи.

Инструмент Time Profiler профилирует ваше приложение для повышения производительности. Сложная часть использования инструмента Time Profiler - интерпретация результатов. Инструмент Time Profiler не сообщит вам, что ваше приложение тратит 75% своего времени на функцию X. Вам нужно рыться в данных, чтобы найти медленные места в вашем коде.

Что касается приемлемого использования памяти, это зависит от устройств, которые вы хотите поддерживать, и от приложения. Такое приложение, как Xcode, использующее 100 МБ ОЗУ, было бы в порядке, но приложение, подобное TextEdit, использующее 100 МБ для одностраничного документа, было бы проблемой. 5 МБ не должно быть проблемой для приложения iOS.

person Mark Szymczyk    schedule 11.07.2011
comment
Спасибо за столь исчерпывающий ответ! :) - person ma11hew28; 13.07.2011
comment
Я обнаружил, что инструмент Allocations вводит в заблуждение, когда дело доходит до того, сколько памяти на самом деле использует мое приложение. Обычно он дает числа намного ниже фактического использования памяти. Инструмент «Диспетчер памяти» предоставит вам фактический объем памяти, который использует ваше приложение, в столбце «Реальная память». Я разрабатывал игру OpenGL и получал предупреждения о нехватке памяти слева и справа. В распределении говорилось, что я использую только 12 МБ ОЗУ, диспетчер памяти сказал, что я использую 100 МБ. Итак, поехали. - person Ian; 23.11.2011
comment
@Ian см. stackoverflow.com/a/8797272/287403 Похоже, что живые байты более точны, чем настоящие memory »в инструменте памяти продолжает показывать блоки, которые вы выпустили давно, а ОС еще не восстановила. Также см. stackoverflow.com/a/7574959/287403, в котором я считаю, что общие байты должны быть ближе к "реальным" объем памяти' - person Bob Spryn; 12.03.2012
comment
В настоящее время мы пытаемся понять, сколько больших изображений может отображать наше приложение одновременно. После написания тестового приложения, которое просто выдавало большие JPG-файлы в UIScrollView, используя [UIImage imageNamed:] и / или [UIImage imageWithContentsOfFile:], мы обнаружили, что Allocations показывали только 5 МБ использования прямо перед сбоем приложения, тогда как Real Memory Usage показывал около 750 МБ. Таким образом, для наших целей в данном случае использование реальной памяти давало нам более полезную информацию. - person Dave Klotz; 26.04.2012

Чтобы ответить на некоторые комментарии в ответе Марка:

Распределение живых байтов не включает память текстур OpenGL, которая используется CALayer / UIViews. Это источник разногласий с Монитором памяти.

См. Ответ на этот вопрос здесь: Общие сведения о потреблении памяти на iPhone

person Calvin    schedule 17.07.2012

Память, действительно загруженная в физическую память устройства, - это Resident Memory в VM Tracker Instrument.

Allocation Instrument отмечает только память, созданную malloc/[NSObject alloc] и некоторым буфером фреймворка, например, растровое изображение распакованного изображения не включается в Allocation Instrument, но оно всегда занимает большую часть вашей памяти.

Пожалуйста, посмотрите WWDC 2012 Сессия 242 «Производительность приложений iOS: память», чтобы получить информацию от Apple.

person CarmeloS    schedule 22.08.2013