我使用此闭包成功从视频中提取图像(其中imageHashRate
是类型为NSValue
的数组)。我以相等的间隔从三秒钟的视频中提取90张图片:
imageGenerator.generateCGImagesAsynchronouslyForTimes(imageHashRate) {(requestedTime, image, actualTime, result, error) -> Void in
if (result == .Succeeded) {
imageArray.append(UIImage(CGImage: image!, scale:1.0, orientation: UIImageOrientation.Right))
NSLog("SUCCESS!")
}
}
}
除了处理图像的速度很慢(90张图像约为6.6秒)外,一切正常。我开始研究“成功”之间的时间。消息,这是我发现的:
处理第一张图像所需的时间约为0.027秒。处理第二图像所花费的时间是~0.030秒。第三张图片,~0.032秒。第10幅,第20幅和第30幅图像分别处理~0.053,~0.082和~0.14秒。相当显着的放缓。
在第30张图片之后,会发生一些有趣的事情。处理第31个图像的处理时间在~0.017秒内显着降低。然后处理时间逐渐增加,直到它们再次达到第60个图像的峰值。和以前一样,第61幅图像的图像处理时间急剧下降。
这是我制作的图表,显示了处理时间的周期性趋势:
这是显示处理时间与前一图像的变化的图表。我认为它可以很好地了解前10个图像相对稳定的过程,然后变得非常不稳定:
这是我到目前为止所做的尝试,以改善处理时间:
imageHashRate
数组拆分为多个大约8-10个值的数组,因为图像生成器可以令人满意地运行前10个图像。通过GCD组运行所有这些阵列(对性能没有影响)autoreleasepool{}
的行上使用imageArray
。 (对表现没有影响)关于导致这种放缓的原因以及如何改善绩效的任何想法?