Дисковый кеш против воссоздания образа - PullRequest
0 голосов
/ 17 октября 2011

В настоящее время у меня есть приложение, в котором я много работаю с изображениями.Я в основном беру изображение размером 320x320 ( или 640x640 на Retina ) и уменьшаю его до 128x128 ( или 256x256 на Retina ), а затем скругляю его углы и применяю глянцевую подсветку.Все делается с использованием графического ядра Core.

В любой момент может быть около 600 изображений, нуждающихся в этой обработке, поэтому я запускаю около 40 при запуске приложения с использованием фонового потока и кэширую их в очередь FIFO.Когда изображение, не находящееся в кэше, нуждается в обработке, я делаю это и добавляю его в конец кэша, отбрасывая первое кэшированное изображение.Если это первое изображение понадобится снова, оно проходит тот же процесс.

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

Эти изображения также отображаются с использованием CALayer, и, следовательно, могут быть издержки, когда установлено содержимое слоевиз-за преобразования из UIImage в CGImage.Если я сохраню их на диске, я считаю, что они могут быть прочитаны непосредственно как CGImage?

. Любые идеи и предложения по повышению эффективности этого процесса будут искренне приветствоваться.

Ответы [ 3 ]

1 голос
/ 17 октября 2011

Мой личный выбор - использовать дисковый кеш.

Однако вы говорите «что эффективнее» - что вы имеете в виду?

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

Вам придется попробовать и посмотреть:)

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

0 голосов
/ 10 февраля 2014

Также полезно попробовать библиотеки github, которые загружают и кэшируют UIImage / NSData из Интернета.

Может быть с помощью SDWebImage (https://github.com/rs/SDWebImage) или APSmartStorage (https://github.com/Alterplay/APSmartStorage).

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

0 голосов
/ 17 октября 2011

По моему опыту, сохранение и чтение с диска происходит быстрее. У меня были некоторые предупреждения памяти, делая это снова и снова, вместо того, чтобы сохранять и читать. Но единственное, что нужно знать наверняка, это попробовать. Я использовал около 1000 изображений, поэтому в моем случае имеет смысл использовать диск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...