инструменты с iOS: почему Memory Monitor не согласен с распределением? - PullRequest
26 голосов
/ 02 апреля 2011

Как видно на этом снимке экрана с инструментов, Allocations считает, что мое приложение (Ongo) использует только 7,55 МБ памяти, в то время как Memory Monitor показывает 53,30.Более того, свободная системная память практически не коррелирует с объемом памяти, который использует приложение.Кто-нибудь знает, почему между этими двумя инструментами так много разногласий?Кроме того, возможно ли найти источник нехватки системной памяти или как предотвратить его быстрое исчерпание?Мое приложение, похоже, не теряет память, но каким-то образом истощает системные ресурсы.

Спасибо

Instruments Y U Lie?

Ответы [ 4 ]

31 голосов
/ 12 апреля 2011

Я полагаю, что это связано с тем, что использование памяти OpenGL ES скрыто от ObjectAlloc, но учитывается в памяти монитора.Например, см. Тесты zoul в его вопросе здесь , где он наблюдает небольшое повышение в ObjectAlloc при создании текстуры, но затем эта память исчезает из этого инструмента при передаче в OpenGL ES.Memory Monitor по-прежнему отслеживает эту текстурную память.

Это должно включать в себя визуальный аспект элементов пользовательского интерфейса, таких как слои и представления, поскольку CALayers фактически являются обертками для текстур OpenGL ES.Фактическое представление 2D-изображения ваших элементов пользовательского интерфейса не отслеживается ObjectAlloc, что приводит к снижению общих значений в ObjectAlloc.

ObjectAlloc по-прежнему хорош для отслеживания чисел и типов распределений и дажеболее ценным с момента появления функциональности heapshot.Вы просто хотите связать его с Memory Monitor, чтобы посмотреть на ваше истинное общее использование памяти.

5 голосов
/ 22 августа 2013

Для тех, кто видит этот пост после 2012 года:

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

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

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

3 голосов
/ 14 апреля 2011

Монитор памяти будет считать большинство или все ресурсы, удерживаемые приложением, включая косвенно выделенные на уровне ядра. Это включает в себя видеопамять AFAIK (текстуры и т. Д.), Как предложил Брэд, а также файлы с отображенной памятью и, возможно, большие структуры ядра, такие как сокеты. Список, вероятно, довольно длинный ...

0 голосов
/ 04 ноября 2016

Любой код, заключенный в фигурные скобки диспетчерского вызова в GCD, экранируется от двух вещей: сообщения об ошибках и, иногда, подсчета распределения. Это обычно относится только к CoreFoundation или любому другому не-UIKit или не-NSFoundation.

...