visual studio 2010 - C# Possible Memory Leak? -
so, have app, written in c# (vs2010), performing ocr using tesseract 3.02 dll , charles weld's terreract .net wrapper.
i think have memory leak , seems in area of code pix object allocated. taking pdf, converting grayscale png, loading pix object ocr. when works, works well. image large in size (5100 or pixels in each dim) not large in size (only 500k or so).
my code:
init engine @ app startup:
private tesseractengine engine = new tesseractengine(@"./tessdata/", "eng+fra", enginemode.default);
method convert pdf png, calls:
// load image file created earlier pix object. pix piximage = pix.loadfromfile(path.combine(textboxsourcefolder.text, sourcefile));
and calls following:
// perform ocr on image referenced in pix object. private string performimageocr(pix piximage) { int safety = 0; { try { // deskew image. piximage = piximage.deskew(); //piximage.save(@"c:\temp\img_deskewed.png", imageformat.png); // debugging - verify image deskewed allow ocr. string text = ""; // use tesseract ocr engine process image using (var page = engine.process(piximage)) { // , extract text. text = page.gettext(); } return text; } catch (exception e) { messagebox.show(string.format("there error performing ocr on image, retrying.\n\nerror:\n{0}", e.message), "error", messageboxbuttons.ok); } } while (++safety < 3); return string.empty; }
i have observed memory usage jumps 31mb when pix object created, jumps again while ocr being performed, settles 33mb higher before started. ie: if app, after loading, consuming 50mb, loading pix object causes memory usage jump 81mb. performing ocr see spike 114+mb, then, once process complete , results saved, memory usage settles 84mb. repeating on many files in folder cause app barf @ 1.5gb or consumed.
i think code okay, there's somewhere that's holding onto resources.
the tesseract , leptonica dlls written in c , have recompiled them vs2010 along latest or recommended image lib versions, appropriate. i'm unsure of, how diagnose memory leak in c dll c# app using visual studio. if using linux, i'd use tool such valgrind me spot leak, leak sniffing skills on windows side sadly lacking. looking advice on how proceed.
reading code here not see disposing pix piximage anywhere? that's taking resources when processing x images. before return string result should call dispose method on piximage. should reduce amount of resources used program.
Comments
Post a Comment