Определите максимальную емкость хранилища для обработки растровых изображений для отображения в приложении UWP

#memory-management #uwp

Вопрос:

Я перетасовываю сотни растровых изображений в оперативную память и из нее, пока мои пользователи просматривают свою библиотеку ресурсов. Для растровых изображений предусмотрено максимальное место для хранения. Прямо сейчас, поступая консервативно, я сбрасываю все загруженные растровые изображения при изменении вида ресурсов (Подумайте о переворачивании страницы и т. Д.).

Это приводит к довольно резким задержкам в циклах выборки/рендеринга, даже если ресурс уже был загружен на последней странице.

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

Я использую ресурсы из нескольких источников, включая локальный диск и сетевые URI…, поэтому простое использование механизмов XAML не будет работать (поскольку это применимо только к сетевым URI, а не локальным ресурсам).

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

Комментарии:

1. Я думаю, что было бы лучше контролировать источник изображения. Независимо от того, где вы получаете эти изображения, вам нужно прочитать или загрузить их в свою память. Вначале просто загрузите часть из них в память, сначала вы можете показать их в своем пользовательском интерфейсе. Затем прочитайте и загрузите следующую часть, если это необходимо. И не забудьте освободить основную часть одновременно с загрузкой новых изображений.

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

3. Если я правильно понимаю предложение @RoyLi-MSFT, проблемы с памятью не должно быть, если вы просто покажете часть из них за один раз.

4. Если вы разрежете список изображений на мелкие части, покажете их по одному и вовремя отпустите предыдущее изображение, вы все равно получите исключение из памяти? Если это работает, то вам не нужно изменять память.

5. Джентльмены, пожалуйста, прочитайте мой вопрос. Конечно, я просматриваю активы. Мой вопрос в том, как определить, когда мне нужно освободить растровое изображение из памяти (которое будет загружено позже), потому что при размерах ресурсов в диапазоне 100 МБ каждый это немного запаздывает. Итак, как я могу узнать, когда контейнер UWP достигнет своей емкости и настало время очистить кэш?