C#内存泄漏有关问题,求大神如何解决

C#内存泄漏问题,求大神怎么解决
 private void OCR()
        {
            //tessnet2.Tesseract ocr = new tessnet2.Tesseract();//声明一个OCR类
            tessnet2.Tesseract ocr = null;
            string defaultCharList = "0123456789";
            ocr = new tessnet2.Tesseract();
            ocr.SetVariable("tessedit_char_whitelist", defaultCharList);//设置识别变量,当前只能识别数字及英文字符。
            ocr.Init(Application.StartupPath + @"\tessdata", "eng", false); //应用当前语言包。注,Tessnet2是支持多国语的。语言包下载链接:http://code.google.com/p/tesseract-ocr/downloads/list

            WebClient wc = new WebClient();
            byte[] oimg = wc.DownloadData(txtImageUrl.Text); // 自己修改成要识别的地址吧
            Bitmap bp = new Bitmap(new MemoryStream(oimg), true);//识别图像
            Bitmap bp2 = new Bitmap(new MemoryStream(oimg), true);
            picBox1.Image = bp2;
            //bp = ImageProcess.RemoveGreen(bp);
            //bp = ImageProcess.ToBW(bp);

            picBox2.Image = bp;

            List<tessnet2.Word> result = new List<tessnet2.Word>();
            string txt = "";

            try
            {
                result = ocr.DoOCR(bp, Rectangle.Empty);//执行识别操作
                foreach (tessnet2.Word word in result)//遍历识别结果。
                {
                    txt += word.Text;
                }
            }
            catch (Exception ex)
            {

            }
            
            textBox1.Text = txt;
        }
    }

网上下的源码。每调用一次内存就增加2m。直到内存超限,应用程序自动关闭。

求大神怎么解决
------解决思路----------------------
不一定是这里的问题,也可能是 ocr.DoOCR内部才分配了非托管资源,解决方法还是要Dispose,要么你干完之后调用ocr.Dispose,要么用using,如果ocr没有Dispose方法那就没法解决问题了,不过你可以要求厂家把Dispose方法加上去,

Quote: 引用:


问题出在这段代码:
    try
                 {
                     result = ocr.DoOCR(bp, Rectangle.Empty);//执行识别操作
                     foreach (tessnet2.Word word in result)//遍历识别结果。
                     {
                         txt += word.Text;
                     }
                 }
                 catch (Exception ex)
                 {
 
                }
 
我去掉这段代码执行程序是每问题的。 

Quote:

------解决思路----------------------
对于非托管资源,强制执行GC.Collect()也是没用的。
如果确实像楼主说的那样,问题出在ocr的话,可尝试下面
   try
                {
                    result = ocr.DoOCR(bp, Rectangle.Empty);//执行识别操作
                    foreach (tessnet2.Word word in result)//遍历识别结果。
                    {
                        txt += word.Text;
                    }
                }
                catch (Exception ex)
                {

                }
finally
{
    ocr.Dispose();
}

如果还没有效果,那就是ocr本事的问题:它内部使用的资源没有在Dispose()方法里释放掉