Monotouch:操纵许多图像 - 内存不足

时间:2011-11-29 21:50:52

标签: memory-management xamarin.ios uiimage

我正在寻找一种处理许多图像的方法,但不会耗尽内存。当我的应用程序第一次运行时,它必须创建许多缩略图并在本地存储它们。这只发生一次。

虽然我的内存错误。

我大概是这样的:

 [Loop BigPaths]
  sourceImg = UIImage.FromFile (nextBigpath);
  img = UIImageTools.MakeSquare (sourceImg, 50,3);
  img.AsJPEG ().Save (path, NSDataWritingOptions.Atomic, out err);
  sourceImg.Dispose ();
  sourceImg = null;
  img.Dispose ();
  img = null;     
  [end loop]

更新

要修复它,我现在每10个项目后调用GC.Collect(),在Thread.Sleep()中等待50毫秒。

我还在循环外定义了sourceImg img

通过这两项更改,我不再遇到内存错误。

1 个答案:

答案 0 :(得分:1)

这是我发现的解决方案。

在循环外创建图像变量并重复使用它们,确保在每次使用后调用.Dispose()。

50个图像后调用GC.Collect()然后调用Thread.Sleep(50)以给GC清理时间。

之后没有内存问题。