Является ли Spiky Memory "здоровым" для приложения?

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

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

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

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

Спасибо!

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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