user814037
user814037

Reputation:

Disk cache vs Recreating the image

I currently have an app where I do a lot of image manipulation. I basically take an image that is 320x320 (or 640x640 on Retina) and scale it down to 128x128 (or 256x256 on Retina) before rounding off its corners and applying a glossy highlight. Everything is done using Core Graphics drawing.

At any one time there could be around 600 images that need this processing so I do around 40 on app launch using a background thread and cache them into a FIFO queue. When an image not in the cache needs processing, I do so and add it to the end of the cache, discarding the first cached image. If that first image is needed again it goes through the same process.

What I would like to know is if it would make more sense, and is ultimately more efficient, to save the discarded images to disk rather than recreate them from scratch the next time they are needed, as I could instead just read them from disk.

These images are also displayed using a CALayer and therefore there may be a overhead when the layers' contents are set because of the conversion from UIImage to CGImage. If I store them on disk I believe they can be read directly as a CGImage?

Any ideas and input on improving the efficiency of this process will be sincerely welcomed.

Upvotes: 0

Views: 377

Answers (3)

slatvick
slatvick

Reputation: 1207

It's also good to give a try github's libs that downloads and caches UIImage/NSData from Internet.

It may by SDWebImage(https://github.com/rs/SDWebImage) or APSmartStorage (https://github.com/Alterplay/APSmartStorage).

APSmartStorage helps to get data from network and automatically caches data on disk or in memory in a smart configurable way. Should be good enough.

Upvotes: 0

deanWombourne
deanWombourne

Reputation: 38475

My personal choice would be to use a disk cache.

However, you say 'which is more efficient' - what do you mean?

  • If you mean faster then the disk cache is probably going to win.
  • If you mean more space efficient then recreating them will win.
  • If you mean lower memory usage then it entirely depends on your implementation!

You will have to try it and see :)

However, the advantage of the disk solution is that the second time your app starts up, it will already have done the processing so will start faster. That's why I'd use the disk.

Upvotes: 1

Rui Peres
Rui Peres

Reputation: 25917

From my experience, saving and then reading from the disk is faster. I had some memory warnings by doing it over and over, instead of saving and reading. But, the only to know for sure is to try. I was using around 1000 images, so it makes senses in my case to use the disk.

Upvotes: 0

Related Questions