このコードが実行回数に応じて異なる速度で実行される理由を説明する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));
}
実行時間
- アプリの新規インストール-メソッドの最初の呼び出し= 206ms
- アプリが再起動しました-メソッドの最初の呼び出し= 61ms
- メソッドへの2番目の呼び出し(3番目、4番目、...)= 14ms
すべての実行で同じソースイメージが使用されています。
CoreImageがフィルターチェーンを連結していることは知っています。これはどういうわけかキャッシュされていますか?ユーザーが最初のアプリの起動時にパフォーマンスの問題に見舞われないように、この操作を事前にキャッシュできますか?
これは私を夢中にさせています:(