Неясности в использовании инструментов для разработки iOS - PullRequest
6 голосов
/ 02 декабря 2011

Я профилирую заявку с помощью инструментов.Профилирование выполняется с помощью инструмента Allocations Tool двумя способами:

  1. Путем прямого выбора распределения при запуске приложения для профилирования
  2. путем выбора утечек при запуске приложения для профилирования.

В обоих случаях у меня был включен инструмент Allocations для тестирования.Но удивительно, что в этих случаях у меня было два разных вида Out для распределения.

Должны ли они вести себя по-разному?или это проблема с инструментами.

Время, когда я профилирую с инструментом утечек:

В графике распределения: enter image description here 1. Я получаю много пиков в графике, живых байтах иобщие байты одинаковы.2. Я получаю черные флаги (я думаю, это предупреждает о предупреждении памяти) после 1 минуты использования.Затем, после появления набора флагов, мое приложение падает.(Это иногда происходит, даже когда приложение запускается непосредственно на устройстве)

Время, когда я профилирую с помощью инструмента выделения:

В графике распределения: enter image description here 1. Я не получаю пиковчасто, как это было в вышеуказанном случае.Живые байты всегда были намного меньше, чем общие байты.2. Я использовал более 20 минут и никогда не получал черные флаги.

Один факт, который я узнал, состоит в том, что, когда байты Live и общие байты равны, NSZombieEnabled может быть включен.

Кто-нибудь из вас когда-либо сталкивался с этой проблемой.

ОБНОВЛЕНИЕ 1:

Я столкнулся с другой проблемой в первом случае.Всякий раз, когда я выполнял профилирование после короткого промежутка времени (по сравнению с профилированием во втором случае), приложение получало много черных флагов и мое приложение рухнуло.(Из-за предупреждения о памяти)

И когда я попробовал подобное пошаговое использование Приложения, мое Приложение не зависало и не получало флагов.

Почему это несоответствие?

Ответы [ 2 ]

9 голосов
/ 02 декабря 2011

В первом случае вы отслеживаете только оперативные распределения, потому что шаблон «Утечки» настраивает инструмент распределения таким образом. Во втором случае вы отслеживаете как живое, так и выделенное распределение. (Как сказал CocoaFu).

Оба полезны, но по несколько иным причинам.

Только отслеживание оперативных выделений (обычно в сочетании с Heapshot Analysis) является отличным способом анализа постоянного роста кучи в вашем приложении. Как только вы знаете, что происходит вокруг навсегда, вы можете выяснить, почему и посмотреть, есть ли способы оптимизировать его.

Отслеживание всех распределений, живых и мертвых, является очень эффективным средством отслеживания полосы пропускания распределения. Вы можете сортировать по общему количеству байтов и начинать с самого большого #. Посмотрите на все точки распределения (нажмите на маленькую стрелку рядом с меткой в ​​категории выбранной строки) и посмотрите, откуда все распределения.

Например, ваш график показывает, что за этот период времени было выделено 147 байт объемом 1,27 МБ - 9218. Все были свободны () d [хорошо!], Но это все еще представляет собой кучу работы по выделению, заполнению данными (предположительно) и освобождению каждого из них. Это может быть проблемой, а может и нет.

(Чтобы представить это в перспективе, я использовал эту технику для оптимизации приложения. Просто сосредоточившись на сокращении количества переходных процессов - недолговечных - распределений, я смог сделать первичные алгоритмы приложения в 5 раз быстрее и сократить использование памяти на 85%. Оказывается, приложение копировало строки много, много раз.)

<Ч />

Не уверен, почему ваше приложение упало, как вы описали. Поскольку это предупреждение памяти, вы должны увидеть, что выделяется чаще всего.

Имейте в виду, что если у вас включено обнаружение зомби, это потребует много дополнительной памяти.

2 голосов
/ 02 декабря 2011

В зависимости от способа создания Распределений существуют разные варианты.Проверьте параметры, щелкнув символ «i» на плитке «Выделения».

Да, это также раздражает.

...