Zxing's System.Drawing.Bitmap可能存在内存泄漏
本文关键字:存在 内存 泄漏 Bitmap Drawing System Zxing | 更新日期: 2023-09-27 18:04:51
我目前正在使用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。所以我需要位图,这样我就可以创建位图的bytes[]来传递给RGBLuminanceSource
有什么好主意吗?
如果您使用的是[1]中的代码,那么它看起来相当不完整。不释放从AllocHGlobal分配的内存,这将导致内存不足的情况。
这不是MonoTouch的错误- zxing代码应该在Bitmap类上实现IDisposable,并确保在被处置时(或当GC运行其终结器时)所有内容都被释放。
您可以完成类(即实现IDisposable)或复制/粘贴部分,为您提供包含图像的byte[]缓冲区(并在将其复制到托管缓冲区后释放非托管内存)。
[1] https://github.com/JohnACarruthers/zxing.MonoTouch/blob/master/Bitmap.cs