gpt4 book ai didi

ios - GPUImage内存积累

转载 作者:行者123 更新时间:2023-11-29 02:58:31 25 4
gpt4 key购买 nike

我正在使用此代码使用 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;
});

最佳答案

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

其次,这是运行多个模糊 channel 的极其低效的方式。往返 UIImages 需要将数据传入和传出 GPU,这很慢,并且还需要使用 Core Graphis 进行重绘,这甚至更慢。同样,过去几个月框架中的代码可以有效地生成大半径模糊,而不会出现您以前可能见过的任何伪影,从而无需上述循环。

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

关于ios - GPUImage内存积累,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23574520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com