Оптимизация использования памяти iPhone / настройка производительности - PullRequest
0 голосов
/ 08 июня 2011

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

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

(увеличенное изображение: нажмите здесь ) Leak detection result

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

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

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

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

(увеличенное изображение: нажмите здесь ) CPU Sampler Result

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

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

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

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

1 Ответ

0 голосов
/ 01 июля 2011

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

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

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

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

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

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

3.Почему «Сэмплер ЦП» и «Распределение» показывают разные отпечатки памяти?Я правильно их прочитал?

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...