Spiky Memory «Здоров» для приложения? - PullRequest
10 голосов
/ 30 января 2011

Недавно я разрабатывал приложение, которое обрабатывает большой объем данных очень часто (~ 15 раз в минуту).Для этого я выделил большой кусок памяти, а затем освободил его для каждой партии данных.

Вот экран с выделением памяти из инструментов: The memory

Использование памяти колеблетсяот 3 до 30 МБ довольно быстро.Мне было просто интересно, действительно ли это «здорово» для iPhone.

Опасно ли так быстро выделять и освобождать так много памяти?Это неустойчиво или просто плохая практика?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 30 января 2011

Это не рискованно и не обязательно плохо. Выделение и освобождение памяти занимает время, поэтому делать это очень часто, а не делать это один раз, а повторное использование выделенной памяти - это компромисс между эффективностью использования памяти (используя наименьший объем памяти в каждый момент) и производительностью. *

Если производительность вашего приложения в настоящий момент не страдает, вы, вероятно, сделали правильный выбор в отношении этого компромисса для своего приложения.

Вообще говоря, использование 30 МБ памяти довольно много для старых устройств (iPhone 3G и старше). Вы не можете быть уверены, что в вашем приложении достаточно памяти, поэтому будьте готовы к получению предупреждений о памяти. Если ваше приложение не может уменьшить использование памяти, когда оно получает предупреждение о памяти, ОС может его убить.

4 голосов
/ 30 января 2011

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

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

0 голосов
/ 30 января 2011

Зависит от того, если у пользователя iPhone 4 или iPhone 3GS это должно быть выполнимо, но на iPhone 3G это приведет к очень быстрому предупреждению памяти. iPhone 4 имеет 256 МБ оперативной памяти для приложений (всего 512 МБ) iPhone 3GS имеет 128 Мб для приложений и 256 всего iphone 3g имеет только 128 МБ и 64 МБ для приложений ... обычно около 40 МБ бесплатно, когда приложения не запущены.

Как говорит apple, вы должны выделять только ту память, которая вам действительно нужна, и стараться не использовать авто-релиз слишком часто, потому что авто-релиз дает нам объект, который выделяется, пока мы больше не нужно

Если производительность не так уж и плоха, я бы попробовал использовать меньше памяти и выделять больше, когда вам это действительно нужно.

...