首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >GPUImageFilter与CIFilter (GPUImage的内存问题)

GPUImageFilter与CIFilter (GPUImage的内存问题)
EN

Stack Overflow用户
提问于 2013-12-26 22:42:03
回答 1查看 923关注 0票数 0

GPUImage有没有内存问题?下面是两个不同的渐晕滤镜效果代码。第一个(苹果的CI过滤器)使用19MB内存,而GPUImage使用超过75MB内存。我的代码出了什么问题?

使用CIFilter的Vignette滤镜

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CIImage *ciImage = [[CIImage alloc] initWithImage:image];
CIFilter *filter = [CIFilter filterWithName:@"CIVignetteEffect" keysAndValues:kCIInputImageKey, ciImage, nil];

CIContext *context = [CIContext contextWithOptions:nil];
CIImage *outputImage = [filter outputImage];
CGImageRef cgImage = [context createCGImage:outputImage fromRect:[outputImage extent]];

UIImage *result = [UIImage imageWithCGImage:cgImage];
CGImageRelease(cgImage);

return result;

下面是GPUImage版本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GPUImageFilter * f = [[GPUImageVignetteFilter alloc] init];
UIImage *result = [f imageByFilteringImage:image];

return result;

我在我的项目中使用了"ARC“。你有什么想法吗?我应该怎么做才能“释放”GPUImage过滤器内存?

EN

回答 1

Stack Overflow用户

发布于 2014-01-03 22:42:13

对于上述代码中的GPUImage方法,内存中将简短地存在图像的四个副本:原始UIImage及其字节、该图像在图形处理器上被上传到的纹理、过滤操作的结果以及作为该操作的结果而创建的UIImage及其字节。

上面使用的方便方法可能很简单,但它们在减少内存压力方面并不是最好的。相反,我会尝试如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:image smoothlyScaleOutput:NO];
GPUImageVignetteFilter *vignetteFilter = [[GPUImageVignetteFilter alloc] init];
[stillImageSource addTarget:vignetteFilter];
[stillImageSource prepareForImageCapture];
[stillImageSource processImage];
UIImage *result = [vignetteFilter imageFromCurrentlyProcessedOutput];

根据您的原始UIImage是如何创建的,您可能希望在创建原始UIImage的同时,将其中的第一行包装在@autoreleasepool中。第一行之后不再需要原始UIImage,因此在任何给定时间,内存中最多应该有两个图像。

-prepareForImageCapture位是一种优化,可使由此返回的UIImage与过滤器的输出纹理共享内存映射。这消除了对最后一个图像副本的需要,但它确实会将过滤器锁定到UIImage,并且如果您尝试重用该过滤器或UIImage,可能会导致奇怪的行为。我也不能完全确定当过滤器在其内存映射的UIImage之前被释放时,是否所有的内存都被释放了,所以在该方法的末尾将图像编码为JPEG或PNG,并且只传递该图像的NSData表示可能会更安全。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20792216

复制
相关文章
[译] 在Kubernetes生产环境中运行Istio
本文翻译自 https://www.tigera.io/blog/running-istio-on-kubernetes-in-production-part-i/,作者 Alexander Lukyanchenko,发表于2019年5月。
SammyLiu
2020/02/25
1.5K0
在VSCode中配置python运行环境
使用Visual Studio Code来写Python,你将体验到丝滑的编程体验和无限扩展的可能。而且,如果你的项目是包含多种语言的,比如Web开发,你不必再开多个编辑器和其他工具,因为这一切都可以在VSCode里完成了。下面说说具体操作。
fem178
2018/07/25
25.7K0
在VSCode中配置python运行环境
ubuntu 安装 Ruby, Rails 运行环境
或者可以安装 1.8.7 版本,也可以是 1.9.3,只要将后面的版本号跟换一下就可以了 同样继续等待漫长的下载,编译过程,完成以后,Ruby, Ruby Gems 就安装好了。 步骤3 - 设置 Ruby 版本
零式的天空
2022/03/02
1.7K0
在mac上配置rails开发环境
  首先,安装home-brew,并且升级到最新的版本,值得一提的是home-brew个人感觉比port要好用,安装软件也方便一点。
用户9127725
2022/08/08
1.3K0
在 WSL 2 中基于 Docker 编排 LNMP 运行环境
上篇教程学院君给大家演示了如何在 Windows 中安装 WSL 版 Ubuntu 虚拟机,并且在虚拟机中安装了 PHP、Composer、Git 等 PHP 开发基础软件,此外还简单介绍了 WSL 虚拟机与 Windows 宿主机之间的文件同步机制。
学院君
2020/07/21
6.9K0
在 WSL 2 中基于 Docker 编排 LNMP 运行环境
Kubernetes在ShareThis生产环境中的实践
ShareThis从一个小插件起家,发展至今每月服务的网站超过450万家,为网站内容的发布者提供了高品质的服务。 快速发展是有代价的。ShareThis在扩张的过程中积累了技术负债,在基础设施方面的负债尤为突出。随着公司规模的进一步扩大,基础设施的开销因为人员和设备利用率低下的原因暴涨。一年前已经到了不得不变的地步。 Kubernetes是我们减轻基础设施负债的关键,它的作用主要体现在下面几个方面: 促进Docker的使用 简化容器管理 转化基础设施人才 实现持续集成与交付 除了Kubernetes的使用我
Rainbond开源
2018/05/31
1K0
react获取运行环境是开发还是生产环境。
import getConfig from '../../../../env.js' // 接口前缀 let phoneApi; // 接口地址获取 if (process.env.NODE_ENV == "development") { phoneApi = getConfig.development.PHONE_API; } else { phoneApi = getConfig.production.PHONE_API; } env.js文件内容 module.exports = {
用户4344670
2020/08/22
1.9K0
pm2:在生产环境中运行 nodejs 应用
如果你用朴实无华的 node 命令去运行 nodejs 应用,那它是不稳定的,运行一段时间就会挂掉,不适合用在生产环境。
前端西瓜哥
2022/12/21
1.1K0
pm2:在生产环境中运行 nodejs 应用
MySQL在Docker环境下运行基础
墨墨导读:MySQL在Docker环境下运行的基础操作,本文从Docker介绍、安装Docker、MySQL安装部署几个方面展开介绍。
数据和云
2020/09/04
1.2K0
在alpine中运行mysql
搬瓦工的1G内存,想要跑一个MySQL服务,动辄500M内存就没了,剩下一半的内存让我感觉很虚,于是想把是不是把MySQL塞进alpine镜像中看看,结果一搜,果然已经有大神这样做了,使用的是MariaDB,测试下来,同样跑一个博客只需要50M内存就OK,简直完美!
老高的技术博客
2022/12/28
3.7K0
在kubernetes中运行openebs
现在,OpenEBS是kubernetes下与容器原生和容器附加存储类型相关通用的领先开源项目之一。通过为每个工作负载指定专用的存储控制器,OpenEBS遵循容器附加存储或CAS的脚步。为了向用户提供更多功能,OpenEBS具有精细的存储策略和隔离功能, 可帮助用户根据工作负载选择存储。该项目不依赖Linux内核模块,而是在用户空间中运行。它属于Cloud Native Computing Foundation沙箱,在各种情况下都非常有用,例如在公共云中运行的群集, 在隔离环境中运行的无间隙群集以及本地群集。
有点技术
2020/07/13
4.8K0
在kubernetes中运行openebs
在 Kubernetes 中运行 Kubernetes
前面其实我们在 Windows 系统的 WSL2 下面使用 KinD 搭建了一套 Kubernetes 集群,KinD 是一个非常轻量级的 Kubernetes 安装工具,他将 Docker 容器当成 Kubernetes 的节点,使用非常方便。既然在 Docker 容器中可以运行 Kubernetes 集群,那么我们自然就会想到是否可以在 Pod 中来运行呢?在 Pod 中运行会遇到哪些问题呢?
我是阳明
2020/06/19
2.9K0
在 Kubernetes 中运行 Kubernetes
在 SCF 中运行 Puppeteer
Puppeteer 是一个 Node.js 库, 提供了一组封装良好的接口, 使你可以通过 DevTools 协议控制 Chrome. 本文介绍如何在 SCF 中使用 Puppeteer.
ritchiechen
2019/04/05
6.7K10
在 SCF 中运行 Puppeteer
在vscode中配置R的开发环境
有时候各位使用R的用户不知道会不会有这样的感觉,visual studio和Rstudio由于负载过重,在打开或者加载R script时会出现加载过慢的情况,但对于很多数据工作者来说,variable inspector和data view这类的数据可视化功能必不可少,而visual studio和Rstudio在这方面做得可以说是非常完善。在这时候笔者就想到了visual studio code,毕竟作为宇宙最强IDE的减配和开源版本(这里形容可能不太准确),各种语言相应的开发插件众多。更加让笔者惊喜的是,目前vscode-R一直处于开发阶段,并且在最近的1.2.0版本结合了vscode关于web view的API,添加了R session watcher——一个集成的数据可视化构架,并且在1.21中完善了windows系统下的extension的bug。我们来看看集成的viewer会有什么样的效果:
用户7652506
2020/08/12
11.8K0
在vscode中配置R的开发环境
在VSCode中配置PHP开发环境
XAMPP 是一个易于安装的 Apache 发行版,下载并安装好就行了。当然也可以用 phpstudy。
字节星球Henry
2021/08/09
5.2K0
在Atom中设置Python开发环境
当然,网络上有很多很棒的文本编辑器。Sublime Text,Bracket,Atom等。就我个人而言,我一直都是Atom的粉丝,因为它是完全免费的,并且它有很多可用的包和主题,这些包和主题使编码变得更容易一些。在这里,我将介绍如何使用Atom来建立一个“Python友好”的开发环境,我将提到一些对python编码有用的软件包,然后看看如何编写一些基本代码。
teachertian
2018/03/13
4.9K0
在Atom中设置Python开发环境
在Atom中配置Python开发环境
当然,这里有很多很棒的文本编辑器。例如Sublime Text, Brackets, Atom。我一直都是Atom的粉丝,因为它是完全免费的,而且它有很多可用的包和主题,使得编码更容易一些。在这里,我将介绍如何使用Atom配置一个“Python友好”的开发环境、一些对python编码有用的软件包,然后看看如何编写一些基本代码。
赵康
2018/03/09
2.8K0
在IDEA中配置Maven开发环境
环境说明: 系统:win10专业版 deepin V20 IDE:IDEA 2020.3 java:jdk1.8 Maven:3.8.1
知识分子没文化
2023/07/01
6740
在IDEA中配置Maven开发环境
在Atom中设置Python开发环境
当然,这里有很多很棒的文本编辑器。Sublime Text,Brackets,Atom。我一直都是Atom的粉丝,因为它是完全免费的,它有很多可用的包和主题,使编码更容易一些。在这里,我将介绍如何使用Atom设置一个“友好的Python”的开发环境,一些对python编码有用的软件包,然后看看如何编写一些基本代码。
anthlu
2018/03/08
2.1K0
在Atom中设置Python开发环境
点击加载更多

相似问题

Rails 4: Capistrano开发环境而不是生产环境?

15

在Rails生产环境中运行Thor

11

Grails 3:集成测试在开发环境中运行,而不是在测试环境中运行。

13

在Rails中运行远程开发环境

30

django覆盖管理在本地运行,而不是在生产环境中运行

117
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文