I am developing a slideshow app; one of its features is that it keeps a history of the last N images it has displayed. It keeps kind of a cache , where it stores, among other things, the image returned by CGImageSourceCreateThumbnailAtIndex(), because this is one of the expensive operations. (You might remember, that this "thumbnail" is necessary so that all the image processing going on in the CGImage API is done at load time, not at the point when the CALayer is created.)
For large images, this "thumbnail" can well occupy 1 GB of RAM. So, when many large images are shown, the app might well use 8 GB or more, which creates heavy memory pressure (Activity Monitor), and causes heavy stuttering. My current approach is to calculate the amount of unused memory, whenever a new images is put in the cache, and if that is below 1.5 GB, I reduce the size of the cache, releasing the old images (CGImageRelease). For computing the amount of unused memory, I use host_statistics64(), and vmstat.free_count+vmstat.inactive_count (vmstat is the struct filled by host_statistics64). My approach seems to help, but I am still wondering what is your opinion: is that a good approach? Is the way I calculate unused memory the best / most reliable one? One reason for asking is that I don't completely understand the way macOS manages memory. (There seems to be a lot of "magic" going on in the VM manager.) All insights and hints will be appreciated . Best regards, Gabriel
smime.p7s
Description: S/MIME cryptographic signature
_______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com