Хранить изображения кэша - PullRequest
1 голос
/ 29 октября 2010

Я ищу наилучшую производительность чтения для кучи (~ 200) кэшированных изображений размером 80 на 80 пикселей. Большой патрон (~ 50) должен быть доступен сразу.

Должен ли я хранить uiimages (в виде двоичных данных) в списке или с использованием основных данных?

1 Ответ

4 голосов
/ 29 октября 2010

Пара основных понятий:

  • CoreData - это, вероятно, худший способ получения данных об изображениях, в документации говорится, что сегменты BLOB в хранилище вызывают серьезные проблемы с производительностью.
  • Используйте файловую систему для того, для чего она создана, доступ для чтения / записи случайных кусков данных.

Остальное зависит от того, как вы организовываете свои данные, поэтому вот несколько соображений:

  • 80x80 довольно мало, вы, вероятно, могли бы хранить в памяти около 50 или около того времени.
  • Вам нужен способ хеширования изображений в какую-то структуру, чтобы вы знали, какие из них выбрать. Я бы использовал данные ядра для хранения расположений изображений в файловой системе, а затем вернул ваш взгляд с помощью NSFetchedResultsController, чтобы вытащить список имен файлов.
  • Используйте некоторые данные в структуре данных памяти для хранения объектов UIImage, здесь хорошо подойдет очередь FIFO размером 50, так как она получает новое изображение из файловой системы и выскакивает самую старую.
  • Наконец, вы должны знать, какие изображения вы собираетесь просматривать, и опережать их, чтение файловой системы не будет очень быстрым, поэтому вам нужно будет либо разделить чтение на части, либо оставаться достаточно далеко от своего обзора, чтобы Избегайте отставания. Если ваш вид показывает 50, вы можете сохранить 100 в памяти, 50+ 25 в предыдущем и 25 в следующем, если вы, например, прокручиваете.

Преждевременная оптимизация:

  • Если важна производительность чтения, было бы целесообразно сохранить изображения в виде фрагментов размером «страницы», таких как zip из 5 или n изображений, которые можно сразу прочитать в память, а затем разбить на соответствующие им UIImage файлы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...