【问题标题】:GPUImage Memory AccumalationGPUImage内存累积
【发布时间】:2014-05-09 21:50:28
【问题描述】:

我正在使用此代码使用 GPUImage 生成 5 个模糊图像,并且似乎有大约 20MB 的内存积累从未被释放。我做错了吗?

这是我的代码:

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    GPUImageFastBlurFilter *blurFilter = [[GPUImageFastBlurFilter alloc] init];
    GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:[image copy]];
    [stillImageSource addTarget:blurFilter];
    CGFloat maxBlur = 12.0;
    for (int i=0; i < BLUR_STEPS; i++) {
        if (!self.stopBlurOperation) { //stops blur operation on close
            UIImageView *imageView;
            if (i < self.blurredImageViews.count) {
                imageView = (UIImageView *)self.blurredImageViews[i];
                blurFilter.blurRadiusInPixels = maxBlur * (i+1) / BLUR_STEPS;
                [blurFilter useNextFrameForImageCapture];
                [stillImageSource processImage];
                UIImage *blurredImage = [blurFilter imageFromCurrentFramebuffer];
                dispatch_async( dispatch_get_main_queue(), ^{
                    [imageView setImage:blurredImage];
                });
                blurredImage = nil;
            }
        }
    }
    [blurFilter removeAllTargets];
    [stillImageSource removeAllTargets];
    [GPUImageContext setActiveShaderProgram:nil];
    blurFilter = nil;
    stillImageSource = nil;
});

【问题讨论】:

    标签: ios objective-c cocoa-touch gpuimage


    【解决方案1】:

    首先,您似乎使用的是旧版本的框架,因为 GPUImageFastBlurFilter 已经好几个月不存在了。存储库中的最新代码使用新的帧缓冲区缓存内存模型,这在大多数应用程序中效率显着提高。

    其次,这是一种运行多个模糊通道的极其低效的方法。往返 UIImages 需要在 GPU 之间传输数据,这很慢,并且还需要使用 Core Graphis 重绘,这甚至更慢。同样,过去几个月框架中的代码具有生成大半径模糊的有效方法,而没有您之前可能见过的任何伪影,因此不需要上述循环。

    最后,您在上面运行了一个紧密的循环,并且在循环中的每次传递中至少生成一个自动释放的 UIImage。如果没有自动释放池在某处排出,您将在该循环运行时继续在内存中构建它们。但是,正如我所说,如果您只是更新到存储库中的最新代码,则可以删除所有这些,而不必担心内存积累。

    【讨论】:

    • 您能否指出我正确的代码?如何做到这一点的一个例子可能会帮助很多人尝试动态生成一些快速的静态模糊。
    猜你喜欢
    • 2016-06-03
    • 2022-10-05
    • 2010-10-05
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2011-09-02
    • 2015-11-18
    相关资源
    最近更新 更多