Выбор ответа Senior Производительность обновлено
Flutter: память при показе фото
Вопрос
Лента показывает миниатюры 100x100 из фотографий 4000x3000, приложение потребляет много памяти. Что помогает?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: cacheWidth/cacheHeight: декодировать сразу в нужном размере. Декодированное изображение занимает ширина x высота x 4 байта: 4000x3000 это около 48 МБ на одну картинку, независимо от размера на экране. cacheWidth задаёт размер декодирования, и миниатюра займёт килобайты.
Варианты ответа
FilterQuality.none, чтобы Flutter не хранил сглаженную копию изображения- Обернуть картинку в
ClipRRect, тогда в памяти останется только видимая часть - Загружать фото через
compute, чтобы декодирование шло в отдельном изоляте cacheWidth/cacheHeight: декодировать сразу в нужном размереправильный ответ
Разбор
Декодированное изображение занимает ширина x высота x 4 байта: 4000x3000 это около 48 МБ на одну картинку, независимо от размера на экране. cacheWidth задаёт размер декодирования, и миниатюра займёт килобайты. Качество фильтрации и обрезка не меняют размер в памяти. Декодирование и так идёт вне UI-потока, проблема не в нём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.