Профилирование утечек памяти с помощью инструментов - огромная разница между iPhone 4 и iOS 5 Simulator - PullRequest
9 голосов
/ 12 декабря 2011

При профилировании моего приложения с помощью Instruments (поиск утечек памяти) с симулятором iPhone 5 для iOS 5 я получаю совершенно другие результаты, чем при использовании iPhone 4 с iOS 5. На первом рисунке показаны результаты профилирования среальное устройство, а второе с симулятором:

реальное устройство:

Real device


iOS 5 Simulator:

Simulator

Этот профиль используется в одной и той же точке приложения в обоих случаях: завершение viewDidLoad в жизненном цикле представления rootViewController.Я ждал в обоих из них, чтобы общая выделенная память стабилизировалась.Как вы можете видеть на графике устройства, в 00:10 наблюдаются некоторые экстремальные колебания, которых нет в симуляторе.На реальном устройстве общий объем выделенной памяти, около 00:08, увеличивается с 1 МБ до 3,5 МБ, затем уменьшается до 1,5 МБ и, наконец, достигает 4,74, где он стабилизируется.Выделенная память для симулятора является гораздо более линейной, с устойчивым и быстрым ростом до примерно 2,35 МБ, где она стабилизируется.

Еще одна вещь, которую следует отметить, - это наличие 2,25 МБ выделенной памяти, присутствующей на устройстве, но неСимулятор от malloc и 700+ кб от CFNumber.Поскольку я относительно новичок в использовании инструментов и профилирования, я не совсем уверен, нормально ли это.Быстрый поиск в Google не дал ничего определенного.Эти 2,25 МБ и 700 КБ более чем компенсируют разницу в распределении памяти.Чтобы уравновесить ситуацию, существует больше записей для malloc с различными объемами памяти, присутствующими в тесте Simulator, которых нет в тесте устройства.

Кроме того, я обнаружил, что когда второй UIViewController помещается в стек UINavigationController, выделяетсяобъем памяти на реальном устройстве увеличивается примерно до 8,5-9 МБ, но на симуляторе - всего от 4,5 до 4,5 мегабайт вершин .

Я знаю, что устройство должно работатьсильно отличается от симулятора, но разве распределение памяти не должно быть почти одинаковым, потому что на обоих устройствах выполняется один и тот же код?Я бы понял, если это профилирование производительности, но для распределения памяти, кажется, цифры должны быть довольно похожи.Кто-нибудь может пролить свет на то, нормально это или нет?

Ответы [ 3 ]

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

Такое поведение следует ожидать. Технически, когда вы запускаете профилирование с помощью симулятора, вы измеряете статистику на основе оборудования вашего рабочего стола. Даже если вы просто профилируете распределения, вы не можете ожидать, что они будут работать аналогично, потому что многие программные оптимизации / алгоритмы / и т. Д. Основаны на оборудовании, на котором он работает.

К сожалению, у Apple нет эмулятора iOS . Вы лучше профилируете с устройством, поскольку эмуляторы, как правило, все еще ненадежны и медленны (например, эмулятор Android).

3 голосов
/ 20 декабря 2011

Я знаю, что следует ожидать, что устройство будет работать много отличается от симулятора, но не должно быть выделения памяти довольно похоже, потому что один и тот же код выполняется на обоих устройствах? я поймет, если это профилирование производительности, но для памяти распределение, кажется, что цифры должны быть довольно похожи. Можно Кто-нибудь пролил свет на то, нормально это или нет?

Технически код совершенно другой. Приложение-симулятор компилируется для байт-кода x86, а устройство компилируется для armv6 / armv7.

3 голосов
/ 20 декабря 2011

Вы всегда должны запускать утечки на устройстве iOS, а не на симуляторе. Результаты, которые вы получите от симулятора, будут только отвлекать, поскольку они редко дают 100% точность. Вы обнаружите, что гонитесь за множеством красных сельдей! хехехе

...