【问题标题】:GPUImage memory leaks when use filters使用过滤器时 GPUImage 内存泄漏
【发布时间】:2017-07-05 05:24:39
【问题描述】:

代码执行后,我的内存使用量增加了。执行后如何释放内存?

仅当我将图像保存在文件系统中时,才会重现此问题。谁能帮忙解决这个问题?

我的代码:

let contrastfilter = GPUImageContrastFilter()
    contrastfilter.contrast = 1.4

let thresholdImageFilter = GPUImageAdaptiveThresholdFilter()
thresholdImageFilter.blurRadiusInPixels = 16.0

let filterGroup = GPUImageFilterGroup()
filterGroup.addFilter(contrastfilter)
filterGroup.addFilter(thresholdImageFilter)
contrastfilter.addTarget(thresholdImageFilter)

filterGroup.initialFilters = [ contrastfilter ]
filterGroup.terminalFilter = thresholdImageFilter

let resultImage = filterGroup.image(byFilteringImage: image)

【问题讨论】:

  • 一旦您的对象不再被引用,内存就会自行释放。您是否尝试过 Instruments 工具来检查内存泄漏?
  • 可能是一些缓存。处理 5 张照片后,我的内存使用量增加到 200 MB,并且在此空间之后没有空闲。然后我得到了内存崩溃
  • 使用 XCode Instruments,(command+i) 并选择“Leaks”。然后像发生崩溃时一样运行应用程序。仪器工具将显示内存泄漏发生在哪一行代码。
  • 我在 gpuimage 中没有发现任何泄漏。我认为这是一些缓存,处理后不干净

标签: ios swift image-processing gpuimage


【解决方案1】:

您可以尝试将您需要释放的内存部分(UIImage 声明、过滤器操作等)放在autoreleasepool 块中。它有助于手动减少内存使用量。

【讨论】:

  • 谢谢。我试了一下,没有效果。
  • 当我第一次遇到此类问题并尝试使用autoreleasepool 时,它也没有效果。我建议尝试改变这个街区的位置和面积。例如,在我的例子中,诀窍是将它放在 inside 循环语句(我正在处理大量图像)并且在块内我必须将我的图像分配给 imageView 语句。所以也许可以玩一下它
  • 我尝试将autoreleasepool 放入处理块和 rx 映射中。我认为 gpuimage 使用的资源不被认为可用于系统和autoreleasepool 无法清除它们。我告诉过它可能是一些 gpuimage 缓存
猜你喜欢
  • 1970-01-01
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2014-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多