提高generateCGImagesAschronicalForTimes的性能?

时间:2015-12-31 18:37:18

标签: ios swift

我使用此闭包成功从视频中提取图像(其中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幅图像的图像处理时间急剧下降。

这是我制作的图表,显示了处理时间的周期性趋势:

processing time per image

这是显示处理时间与前一图像的变化的图表。我认为它可以很好地了解前10个图像相对稳定的过程,然后变得非常不稳定:

change in processing time from previous image

这是我到目前为止所做的尝试,以改善处理时间:

  1. 通过GCD运行闭包(对性能没有影响)
  2. 将我的imageHashRate数组拆分为多个大约8-10个值的数组,因为图像生成器可以令人满意地运行前10个图像。通过GCD组运行所有这些阵列(对性能没有影响)
  3. 在将图片附加到autoreleasepool{}的行上使用imageArray。 (对表现没有影响)
  4. 关于导致这种放缓的原因以及如何改善绩效的任何想法?

0 个答案:

没有答案