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方法加上去,
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方法加上去,