Zxing的System.Drawing.Bitmap可能存在内存泄漏

时间:2011-08-08 02:36:17

标签: c# mono xamarin.ios system.drawing zxing

我目前正在使用Monotouch。我有一个应用程序打开相机,然后需要处理当前正在捕获的图像。我使用的代码与https://github.com/reinforce-lab/com.ReinforceLab.MonoTouch.Controls/tree/master/VideoCaptureSample/

非常相似

我的代码与他们之间的兴趣不同之处在于OverlayView.cs放在我的UIImagePickerController上但是,我有以下代码:

using (var screenImage = CGImage.ScreenImage.WithImageInRect(Frame))
{
    _imageView = UIImage.FromImage(screenImage);
    Bitmap srcbitmap = new System.Drawing.Bitmap(_imageView);
}

但是,运行此代码会导致内存不断填满,直到应用程序关闭。似乎从未处理过System.Drawing.Bitmap。我正在使用ZXing.monotouch所以我需要位图,以便我可以创建位图的bytes []以传递给RGBLuminanceSource

关于如何才能让它发挥得很好的任何想法?

1 个答案:

答案 0 :(得分:4)

如果您正在使用[1]中的代码,那么它看起来相当不完整。什么都没有释放从AllocHGlobal分配的内存,这将导致内存不足的情况。

这不是MonoTouch错误 - zxing代码应该在Bitmap类上实现IDisposable,并确保在处理时(或当GC运行其终结器时)释放所有内容。

您可以完成该类(即实现IDisposable)或复制/粘贴为您提供包含该图像的byte []缓冲区的部分(并在将非托管内存复制到托管缓冲区后释放它)。

[1] https://github.com/JohnACarruthers/zxing.MonoTouch/blob/master/Bitmap.cs