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

4
我目前正在使用Monotouch。我有一个应用程序,它会打开相机,然后需要处理当前正在捕获的图像。我正在使用非常类似于https://github.com/reinforce-lab/com.ReinforceLab.MonoTouch.Controls/tree/master/VideoCaptureSample/的代码。
我的代码与他们的代码之间的区别在于,在放置在我的UIImagePickerController上方的OverlayView.cs中,我有以下代码:
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个回答

4
如果您使用 [1] 中的代码,那么它看起来相当不完整。没有释放从 AllocHGlobal 分配的内存,这会导致内存不足的情况。
这不是 MonoTouch 的错误——zxing 代码应该在 Bitmap 类上实现 IDisposable,并确保在处理时释放所有内容(或当 GC 运行其终结器时)。
您可以完成类(即实现 IDisposable),或者复制/粘贴提供包含图像的 byte[] 缓冲区的部分(并在将其复制到托管缓冲区后释放非托管内存)。
[1] https://github.com/JohnACarruthers/zxing.MonoTouch/blob/master/Bitmap.cs

谢谢,我太傻了,我以为System.Drawing.Bitmap是Mono的一部分,而不是ZXing的一部分...我会修复它并在它工作时将其标记为答案 :) - Symmetry
我会尝试将这些更改合并到ZXing.monotouch github存储库中,以便我们将来不再遇到这些问题 :) - Symmetry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接