我需要使用 CGImageSourceCreateThumbnailAtIndex(...) 创建数千个 CGImage 对象。
问题是当使用 simpleCGDataProviderCreateWithURL(...)
后跟 时CGImageSourceCreateThumbnailAtIndex(...)
,系统会缓存文件的内容(在非活动内存中),这会导致显着的性能损失。
最接近的解决方案:
在这里,建议使用[NSData dataWithContentsOfURL:inURL options:NSUncachedRead error:nil]
然后CGImageSourceCreateWithData(...)
防止系统缓存文件。
最接近解决方案的问题
此解决方案需要在创建缩略图之前将整个文件读取到内存中,这会导致另一个显着的性能损失。
我已经尝试过的事情:
使用
[NSData dataWithContentsOfURL:inURL options:NSUncachedRead|NSDataReadingMappedAlways error:nil];
但它似乎忽略了该NSUncachedRead
选项(文件被缓存到非活动内存)。使用
CGDataProviderCreateWithURL
, 但它也缓存文件。编辑:使用
CGDataProvider
@justin 建议的使用 CGDataProviderCreateSequential(...) 创建的自定义,但是CGImageSourceCreateWithDataProvider
调用CGDataProviderCopyData
首先从我的自定义数据提供程序复制整个图像数据(我只想读取缩略图),甚至在我调用 CGImageSourceCreateThumbnailAtIndex 之前。
关于如何在不将整个文件加载到内存且不缓存的情况下获取缩略图的任何建议?
PS我在创建图像源和缩略图时已经设置kCGImageSourceShouldCache
了kCFBooleanFalse
,但它似乎只与解码数据有关,与读取文件时缓存的原始数据无关。
Edit: I use 10.8. The implementation of functions such as CGImageSourceCreateWithDataProvider may be different on other platforms/versions.