Alex7wrt
-
Постов
508 -
Зарегистрирован
-
Посещение
-
Победитель дней
31
Сообщения, опубликованные Alex7wrt
-
-
-
или попробовать запустить в режиме отладке на самом устройстве тогда должен отловить ошибку.
А как отловить ошибку в режиме отладки?
-
-
А как это делается?
-
при скроле листвью тебе нужно определять какие итемы сейчас находятся в области видимости и только для них держать картинки в памяти, т.е. ты должен при скроле динамически подгружать/выгружать картинки. Если размеры картинок небольшие, то думаю что проблем возникнуть не должно.
Думал про это, но есть сомнения по поводу плавности прокрутки.
Так же, если у тебя там картинки больших размеров чем реальные битмапы, то лучше используй не LoadFromFile, а LoadThumbnailFromFile.
Спасибо за совет!
От 70мб занятой RAM приложение не будет вылетать. Проблема не в этом.
Мб утечки? На пустом приложении с листвью тоже самое?
У меня не вылетает, а не всегда запускается.
-
Картинки png. Через deploy используются двумя способами:
1. image.Bitmap.LoadFromFile('some.png'); - 2 штуки
2. it:=listview1.Items.Add;
..................................it.bitmap.LoadFromFile('some.png'); - 160 штук для списка в listview.Раньше делал через it.bitmapref:=png, что по-моему тоже самое. Просто тут массив картинок, на которые ссылаются битмапы item-ов в listview. А так как написано в пункте 2 - без массива, но у каждого итема свой собственный битмап.
Еще есть 4 картинки, но они погоду не строят.Значит вы их загружаете в память сами.
Да, я загружаю в контейнеры listview (пункт 2) и в два timage (пункт 1). Картинки размером около 220 на 150 пикселей.
Что в итоге дает 220*150*(160+2)*4 = 20 МБ.
Если пункт 2 заменить на
it:=listview1.Items.Add;
...................................
b:=tbitmap.Create; b.LoadFromFile('some.png');it.Bitmap:=b.CreateThumbnail(80,56);то экономится около 20 МБ памяти.
При этом, приложение занимает 70 МБ, корме картинок больше ничего ресурсоемкого нет.
По моим оценкам, оно должно занимать не более 20-30 МБ памяти .
-
Когда деплою - ничего не меняется.Приложение занимает столько же памяти. Деплою в assets\internal.
-
После оптимизации загрузки ресурсов "по надобности", использование RAM в Windows снизилось с 42 МБ до 12 МБ. При этом в Android с 73 до 60 МБ. По-моему это очень нелогично. Единственное объяснение, которое я нахожу, сводится к тому, что Android при запуске приложения грузит все ресурсы в оперативку, не зависимо от их вызова. А при загрузке ресурса в контейнер выделяет еще память. Приложение, которое весит 13 МБ, после установки занимает около 44 МБ в Android (думаю, PNG файлы ресурсов сразу конверитруются в BMP перед установкой). И почти все эти 44 МБ грузятся в RAM при каждом запуске, а остальное выделяется уже по коду. Кто-нибудь знает, так ли это и если так, то можно ли сделать, чтобы RAM под ресурсы выделялась только при их загрузке в самом коде? Может какая настройка в Delphi XE, отвечающая за ресурсы? Я такой не увидел.
-
Загружая картинку в TBitmap она хранится там именно как PMB и занимают {censored} сколько места. Сам не понимал почему у меня приложение на IOS без конца вылетало, потом глянул сколько памяти уходит при загрузке изображений и {censored}.
Правильно я понимаю, что после оптимизации приложение вылетать перестало?
Приходится хранить в памяти только те картинки которые реально нужны здесь и сейчас.
Логичный и хороший совет. Спасибо. Правда все-же хотелось бы как-то уменьшить объем занимаемой ими памяти.
-
Ваше приложение всегда будет выгружаться из памяти, а также запускаться с 1-го раза.
У меня все-равно запускается не с 1-го раза. Подробнее в исходной теме: http://fire-monkey.ru/topic/1053-chastye-sboi-prilozheniia-pri-popytke-zapuska-android/
-
Прочитайте, раз уж спрашиваетеА что означает цифро-буквенный код ['{97E59F4D-4739-4D2E-A4D8-F19BB6E474CB}'] и почему он именно такой?
http://rsdn.ru/article/Delphi/Delphi_7_06.xml
Спасибо.
-
лучше без фильтра )
глянь http://fire-monkey.ru/topic/1046-reshenie-segmentation-fault11-ili-axe-beats-in-the-balls
авось поможет )
Попробовал с процедурой KillMe из этого модуля в FormClose. Результат - мне не помогло. Может этот способ помогает с закрытием приложений, но мои проблеммы,связанные с запуском, остались.
Я тут обнаружил, что одно приложение занимает около 70МБ RAM. На смартфоне с 512 МБ RAM виснет при запуске ощутимо чаще, чем на планшете с 1024 МБ. (интересно, что было бы на девайсе с 256 МБ...). То есть возникла логическая цепочка по поводу слишком большых требований к RAM. Но изменение настроек LargeHeap в VersionInfo на True не помогает,(хотя и не хочется трогать этот параметр). Поэтому все так же теряюсь в догадках по поводу причины сбоев. Но простейшие приложения всегда запускаются без проблем.
В этой связи, если все же догадки по поводу памяти верны, возникает такой вопрос:
В приложении используются PNG изображения в качестве ресурсов. Сами по себе файлы, в которых всего несколько цветов, весят очень мало. Но, насколько я понимаю, при загрузке в tbitmap на каждый пиксель выделяется 4 байта (3 на цвета и 1 на прозрачность), то есть в памяти это изображение png хранится как полноцветный bmp с альфа-каналом? Если так, то на изображения уходит очень много памяти.
Поэтому вот собственно и вопрос: есть ли способ хранить в RAM исходный png, а не BMP? Хотя, как я понимаю, изображение, закодированное таким образом, нельзя редактировать. Но неужели во всех приложениях с графикой в памяти все изображения хранятся как битмапы? Прошу тех, кто владеет темой, объяснить сей момент.
-
А что означает цифро-буквенный код ['{97E59F4D-4739-4D2E-A4D8-F19BB6E474CB}'] и почему он именно такой?
-
Несколько приложений, созданных в Delphi XE 7, не всегда корректно запускаются. Иногда запускаются нормально и работают очень долго, пока не зкароешь, а иногда не запускаются. Появляется заставка и на этом все заканчивается. Не могу понять в чем причина и в какую сторону копать. Приложения разные, но в обоих есть загрузка ресурсов. Но ресурсы не тянут на много. Максимум - до 10 МБ, причем в этом приложении процент неудачных загрузок намного меньше. Проверено на 2-х Android устройствах (сматрфоне и планшете).
Прошу подсказать, в какую сторону смотреть. Может быть, как-то контролировать процесс запуска или еще что-то.
Заранее спасибо.
Сохранение цвета элемента при изменении свойства enabled в значение false
в TLabel
Опубликовано · Изменено пользователем Alex7wrt
Добрый день.
Интересует как можно сделать, чтобы неактивный элемент (enabled=false) отображался в таком же виде как и активный (не менял свой цвет).