Оптимизация использования памяти iPhone / настройка производительности

#iphone #performance #ios4 #memory-management #iphone-sdk-3.0

#iPhone #Производительность #ios4 #управление памятью #iphone-sdk-3.0

Вопрос:

Я нахожусь на последнем этапе разработки моей игры для iPhone: оптимизация и настройка производительности. Моя проблема в том, что игра работает довольно гладко на iphone 4 и iPad, но она часто вылетает на iPhone 2 с iOS 3.1.3 из-за нехватки памяти.

Я прошел через все процессы обнаружения утечек памяти / очистки, и инструмент Xcode не показывает утечек, кроме тех, что из системной библиотеки (см. Следующий снимок экрана). Я также редко использую «авторелиз».

(увеличенное изображение: нажмите здесь) Результат обнаружения утечки

Я также профилировал свое приложение, используя «CPU Sampler» и «Allocations», но немного смущен результатом. Это результат теста «Распределение»:

(увеличенное изображение: нажмите здесь) Контрольный показатель распределения

Это результат после одной игры. Как вы можете видеть, «Живые байты» составляют всего 3,93 МБ, что не должно быть большой проблемой (согласно моему пониманию) — но игра часто вылетает в это время на iPhone 2, ios 3.1.3 .

Я также провел тест «CPU sampler», ниже приведен результат:

(увеличенное изображение: нажмите здесь) Результат выборки процессора

Что меня смутило, так это то, что реальная память показывает «22,32 МБ», а виртуальная память составляет более 100 МБ, что резко отличается от результата «Контрольного показателя распределения».

Меня также смущает тот факт, что мой iPhone 3G под управлением iOS 4.1, даже если у него почти такие же аппаратные характеристики, как у iPhone 2, может очень хорошо запускать мою игру. Это происходит медленно и не так быстро, но сбои случаются редко.

Итак, мои вопросы:

  1. Что еще я могу сделать, чтобы определить проблему с нехваткой памяти на iphone 2?
  2. Являются ли утечки из системных библиотек в результате профилирования «Утечки» проблемой?
  3. Почему «CPU sampler» и «Allocation» отображают разные параметры памяти? Я правильно их прочитал?
  4. Почему iPhone 3G работает намного плавнее, чем iPhone 2G? Это потому, что более новая версия iOS (4.1 против 3.1.3)?

Комментарии:

1. Ваш профиль использования памяти показывает довольно много утечек, я бы, конечно, посмотрел на это как на начало.

2. Спасибо за подсказки, Деврадж! Многие записи в результате профилирования «Утечки» показывают, что «Трассировка стека недоступна для этого блока». Есть идеи, как устранить эти проблемы?

Ответ №1:

1. Что еще я могу сделать, чтобы определить проблему нехватки памяти на iphone 2?

Запустите ваше приложение в симуляторе iOS и используйте пункт аппаратного меню «Имитировать предупреждение о памяти», чтобы инициировать события нехватки памяти в местах, которые, как вы подозреваете, приведут к сбою.

Настройте свое приложение на реальном устройстве, но перед его запуском запустите как можно больше других приложений, чтобы уменьшить объем доступной памяти. Во время запуска вашего приложения время от времени переключайтесь обратно в app grid, чтобы (повторно) запускать другие приложения. Таким образом, вы заставите систему генерировать подлинные события нехватки памяти, но вы не сможете выбрать, какое приложение будет их получать.

Вы могли бы генерировать события ООМ самостоятельно, но тогда вы бы запускали другое приложение. Может быть полезно при разработке, но не рекомендуется, когда близок к выпуску. Очень раздражают ошибки при отладке, вызванные отладочными «вспомогательными» процедурами…

2. Являются ли утечки из системных библиотек в результате профилирования «Утечки» проблемой?

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

3. Почему «CPU sampler» и «Allocation» отображают разные параметры памяти? Я правильно их прочитал?

Понятия не имею, но хотелось бы знать 🙂

4. Почему iPhone 3G работает намного плавнее, чем iPhone 2G? Это потому, что более новая версия iOS (4.1 против 3.1.3)?

iPhone 3G оснащен лучшим, быстрым и более мощным оборудованием, чем iPhone2. В результате приложения, похоже, работают быстрее… что может быть проблемой, если ваше приложение работает слишком быстро на более быстром оборудовании. Другой вопрос — убедиться, что ваше приложение работает с «правильной скоростью» независимо от аппаратного обеспечения.

Комментарии:

1. Извините, но ваш ответ номер 4 совершенно неверен. iPhone 3G и 2G оснащены АБСОЛЮТНО одинаковым оборудованием, за исключением 3G-радиоприемника. Тот же процессор, тот же объем оперативной памяти, все. Возможно, есть какие-то незначительные различия в скорости оперативной памяти или что-то в этом роде, но по сути это одно и то же устройство. Вы, должно быть, путаете его с 3G-S, у которого в два раза больше оперативной памяти и гораздо более быстрый процессор.