iPad получает предупреждение о недостаточном объеме памяти - PullRequest
8 голосов
/ 29 мая 2010

У меня есть UIWebKit с HTML, в этом HTML есть несколько изображений и текст, но только его отображение дает мне предупреждение о памяти. Итак, я сделал несколько тестов: Тот же HTML-код с разными изображениями, полноразмерными и после тех же изображений, но с уменьшением на 50% по сравнению с исходным размером, для изображений с уменьшенным на 50% я пошел на предварительный просмотр и уменьшил все изображения на 50%

Удивительным моментом является тест 50%, вы можете видеть, что даже с 16 изображениями пик памяти составляет 4,90 МБ. Это действительно удивительно. Обратите внимание, что эти значения не всегда одинаковы, они изменяются, но между тестами нет большой разницы.

В выпуске 50% на 8 и 16 изображениях, хотя памяти мало, иногда появляется предупреждение о памяти, но прирост производительности заметен по сравнению с полноразмерными изображениями

стоя на месте = память после прокрутки всей статьи

1 изображение = [стоя 5 МБ] [вращающийся 5,6 МБ]

2 изображения = [стоящие 6,99 МБ] [вращающиеся 7,7 МБ]

3 изображения = [стоящий 9,04 МБ] [вращающийся 10,9 МБ]

4 изображения = [неподвижно 10,89 МБ] [вращается 13,20 МБ]

8 изображений = [стоя 23,34 МБ] [вращается 25,20 МБ] (иногда происходит сбой)

16 изображений = [стоя на месте 27,14 МБ и приложение вылетает]

50%

1 изображение = [стоящий 3,2 МБ] [вращающийся 3,67 МБ]

2 Изображение = [стоящий 3,2 МБ] [вращающийся 3,70 МБ]

3 Изображение = [стоящий 3,3 МБ] [вращающийся 3,79 МБ]

4 Изображение = [стоящий 3,3 МБ] [вращающийся 3,80 МБ]

8 изображений = [неподвижно 4,29 МБ] [вращается 4,63 МБ] (иногда происходит сбой)

16 изображений = [стоящий 4,79 МБ] [вращающийся 4,90 МБ] (иногда вылетает)

Мой вопрос: приложение иногда зависало с 16 маленькими изображениями. Зачем? Память была намного ниже.

Каков предел использования памяти? Максимум казался другим с изображениями размером 50%. 13.2MB работает для больших изображений и 3.8 для маленьких изображений. Все, что выше, иногда падает. Это не имеет смысла.

Спасибо

1 Ответ

2 голосов
/ 22 января 2011

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

w * h * 4

при условии, конечно, что изображение является 32-битным цветным изображением, где w - ширина изображения в пикселях, а h - высота изображения в пикселях. В результате 32-битное цветное изображение 1024x1024 будет использовать приблизительно 4,2 МБ памяти, тогда как 32-битное цветное изображение 512x512 будет использовать 1 МБ

.

Ваш отчет о сбое будет показывать. Кроме того, запуск в Инструментах под инструментом выделения объектов и утечек может иметь огромное понимание (запуск с видимой боковой панелью, он покажет стек вызовов для любых обнаруженных утечек). Также обратите внимание, что если вы обнаружите утечки, которые указывают на такие вещи, как CIOImage или тому подобное, это может произойти там, где утечка в конце концов произойдет, но там, где утечка происходит, почти положительно будет в вашем коде.

Кроме того, при запуске Instruments не забудьте запустить его в приложении, которое работает на вашем устройстве; не принимайте ничего, что сим говорит в чистом виде в таких случаях.

...