Spiky Memory "Здоров" для приложения?
Недавно я разрабатывал приложение, которое обрабатывает большой объем данных очень часто (~15 раз в минуту). Для этого я выделил большой кусок памяти, а затем освободил его для каждой партии данных.
Вот экран с выделением памяти из инструментов:
Использование памяти довольно быстро колеблется от 3 до 30 МБ. Мне было просто интересно, является ли это "здоровым" как таковым для iPhone.
Разве рискованно так быстро выделять и освобождать столько памяти? Это неустойчиво или просто плохая практика?
Спасибо!
3 ответа
Это не рискованно и не обязательно плохо. Выделение и освобождение памяти требует времени, поэтому делать это очень часто, вместо того, чтобы делать это один раз, а повторное использование выделенной памяти - это компромисс между эффективностью использования памяти (используя наименьший объем памяти в каждый момент времени) и производительностью.
Если производительность вашего приложения в настоящий момент не страдает, вы, вероятно, сделали правильный выбор в отношении этого компромисса для своего приложения.
Вообще говоря, использование 30 МБ памяти является довольно большим объемом для старых устройств (iPhone 3G и старше). Вы не можете быть уверены, что в вашем приложении достаточно памяти, поэтому будьте готовы к получению предупреждений о памяти. Если ваше приложение не может уменьшить использование памяти, когда оно получает предупреждение о памяти, ОС может убить его.
Моим основным беспокойством в таких ситуациях будет фрагментация. Если все чанки имеют одинаковый размер, то все будет в порядке (и, глядя на график, пики выглядят абсолютно ровными, так что я думаю, что это так).
Вы будете оплачивать затраты на распределение, но, как говорит Оле, если ваше приложение уже работает достаточно хорошо, нет смысла пытаться его оптимизировать.
Это зависит от того, есть ли у пользователя iPhone 4 или iPhone 3GS, это должно быть выполнимо, но на iPhone 3G это приведет к очень быстрому предупреждению памяти. iPhone 4 имеет 256 МБ ОЗУ для приложений (всего 512 МБ). iPhone 3GS имеет 128 МБ для приложений, а всего 256 iphone 3g имеет только 128 МБ и 64 МБ для приложений... обычно около 40 МБ свободно, когда не работают приложения.,
Как говорит Apple, вам следует выделять только ту память, которая вам действительно нужна, и стараться не использовать авто-релиз слишком часто, потому что он автоматически выделяет нам объект, а он нам больше не нужен.
Если производительность не так уж и плоха, я бы попробовал использовать меньше памяти и выделять больше, когда она вам действительно нужна.