2011-08-08 3 views
4

현재 Monotouch로 작업하고 있습니다. 카메라를 열고 현재 캡처중인 이미지를 처리해야하는 응용 프로그램이 있습니다. 내가 https://github.com/reinforce-lab/com.ReinforceLab.MonoTouch.Controls/tree/master/VideoCaptureSample/Zxing의 System.Drawing.Bitmap에서 메모리 누수가 발생할 수 있습니다.

내 코드와 그들의 사이에 관심의 차이와 매우 유사한 코드를 사용하고 것은 나의 UIImagePickerController를 위에 배치됩니다 OverlayView.cs에서 그러나, 나는 다음과 같은 코드가 있습니다

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

을 그러나이 코드를 실행하면 응용 프로그램이 닫힐 때까지 메모리가 계속 채워집니다. 마치 System.Drawing.Bitmap이 절대로 처리되지 않은 것처럼 보입니다. RGBLuminanceSource로 전달할 비트 맵의 ​​바이트 []를 만들 수 있도록 비트 맵을 필요로하는 ZXing.monotouch를 사용하고 있습니다.

어떻게하면 멋지게 재생할 수 있을지에 대한 아이디어가 있습니까?

답변

4

[1]의 코드를 사용하는 경우 오히려 불완전하게 보입니다. AllocHGlobal에서 할당 한 메모리가 해제되어 메모리 부족 상태가 발생합니다.

이것은 MonoTouch 버그가 아닙니다. zxing 코드는 Bitmap 클래스에 IDisposable을 구현하고 폐기시 또는 GC가 finalizer를 실행할 때 모든 항목이 해제되는지 확인해야합니다.

클래스를 완성하거나 (IDisposable 구현) 이미지를 포함하는 byte [] 버퍼를 제공하는 부분을 복사하여 붙여 넣거나 (관리 버퍼에 복사 한 후에 관리되지 않는 메모리를 비울 수 있음).

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

+0

감사합니다 - 당신은 바보 나, 나는 ... System.Drawing.Bitmap 오히려 ZXing의 일부보다 모노의 한 부분이라고 생각 나는 그것을 수정하고 대답으로이 표시됩니다 일단 작동하면 : – Symmetry

+0

ZXing.monotouch github repo와 병합 된 이러한 변경 사항을 보게 될 것이므로 앞으로 이러한 문제가 다시는 발생하지 않을 것입니다. :) – Symmetry