我找不到任何来自 Apple 的文档来解释为什么这段代码根据运行次数而以不同的速度运行。
- (void)speedTest2:(CIImage*)source {
NSTimeInterval start = CFAbsoluteTimeGetCurrent();
CIFilter* filter = [CIFilter filterWithName:@"CIColorInvert"];
[filter setValue:source forKey:kCIInputImageKey];
CGImageRef cgImage = [_context createCGImage:filter.outputImage fromRect:source.extent];
UIImage* output = [UIImage imageWithCGImage:cgImage];
if (cgImage)
CFRelease(cgImage);
_source.image = output;
NSLog(@"time: %0.3fms", 1000.0f * (CFAbsoluteTimeGetCurrent() - start));
}
运行时间
- 全新应用安装 - 首次调用方法 = 206 毫秒
- 应用程序重新启动 - 首次调用方法 = 61 毫秒
- 第二次调用方法 (3rd, 4th, ...) = 14ms
每次运行都使用相同的源图像。
我知道 Core Image 连接过滤器链。这是否以某种方式被缓存?我可以预先缓存此操作,以便用户在首次启动应用时不会遇到性能问题吗?
这个让我抓狂:(