C#报错 not enough memory in operator find_ncc_model

霸仔@Steven 2020-12-16 11:49:24
c#运行视觉halcon代码报错,好像内存泄露,但是我找不到问题点。试了Gc垃圾回收, 代码如下,模板匹配: private void Read_modelNCC() { try { ho_Rectangle_model.Dispose(); HOperatorSet.ClearNccModel(hv_ModelID); } catch { } try { hv_ModelID.Dispose(); HOperatorSet.ReadNccModel(get_path("hv_ModelID.sbm"), out hv_ModelID); HOperatorSet.ReadRegion(out ho_Rectangle_model, get_path("ho_Rectangle_model.hobj")); // HOperatorSet.CLOSE } catch { //label_state.Text = DateTime.Now.ToString() + "\r\n" + // Name_now + "\r\n" + // "未找到匹配模板,请重新建立模板!" + "" + "\r\n"; } } public void AffintModelNCC() { Read_modelNCC(); if (hv_ModelID.ToString() == "[]" || ho_Image_get.ToString() == "[]") { return; } #region 模板 //Matching 01: Get the reference position hv_ModelRegionArea.Dispose(); hv_RefRow.Dispose(); hv_RefColumn.Dispose();//cleaning HOperatorSet.AreaCenter(ho_Rectangle_model, out hv_ModelRegionArea, out hv_RefRow, out hv_RefColumn); ////显示------------------------------------- #endregion using (HDevDisposeHelper dh = new HDevDisposeHelper()) { try { Stopwatch sw = new Stopwatch(); sw.Start(); hv_Row_find_model.Dispose(); hv_Column_find_model.Dispose(); hv_Angle_find_model.Dispose(); hv_Scale_find_model.Dispose(); hv_Score_find_model.Dispose();//cleaning //HOperatorSet.FindScaledShapeModel(ho_Image_get, hv_ModelID, (new HTuple(-30)).TupleRad() //, (new HTuple(d_angle_stop)).TupleRad(), 0.95, 1.05, Convert.ToDouble(TB_socre.Text), 1, 0.5, "least_squares", (new HTuple(5)).TupleConcat( //1), 0.75, out hv_Row_find_model, out hv_Column_find_model, out hv_Angle_find_model, out hv_Scale_find_model, out hv_Score_find_model); hv_Row_find_model.Dispose(); hv_Column_find_model.Dispose(); hv_Angle_find_model.Dispose(); hv_Scale_find_model.Dispose(); hv_Score_find_model.Dispose();//cleaning HOperatorSet.FindNccModel(ho_Image_get, hv_ModelID, (new HTuple(-30)).TupleRad(), (new HTuple(30)).TupleRad(), ModelScore, 1, 0.5, "false", 0, out hv_Row_find_model, out hv_Column_find_model, out hv_Angle_find_model, out hv_Score_find_model); //add hv_HomMat2D.Dispose();//cleaning
...全文
17068 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
霸仔@Steven 2021-01-04
  • 打赏
  • 举报
回复
找到解决方法:把程序生成64位的,同时电脑系统重装为64位的,长时间运行程序也没有发生内存不足的报错。估计是32位系统和64位系统的内存容纳造成的
霸仔@Steven 2020-12-22
  • 打赏
  • 举报
回复
引用 3 楼 正怒月神的回复:
调试
hv_Row_find_model.Dispose(); hv_Column_find_model.Dispose(); hv_Angle_find_model.Dispose(); hv_Scale_find_model.Dispose(); hv_Score_find_model.Dispose();//cleaning
看看每次运行,内存降了没有
内存有降,但是程序运行两三次后就会报错,在find_ncc-model这个代码处报错。但是内存监控是有变化
霸仔@Steven 2020-12-18
  • 打赏
  • 举报
回复
程序运行三四次就会报错,加了一楼说的释放也不行。还尝试加了内存回收也没用,监控内存升到400 m又会降到200多,按理来说内存应该够用。所以这个问题真的找不到点在哪里
正怒月神 2020-12-18
  • 打赏
  • 举报
回复
调试
hv_Row_find_model.Dispose(); hv_Column_find_model.Dispose(); hv_Angle_find_model.Dispose(); hv_Scale_find_model.Dispose(); hv_Score_find_model.Dispose();//cleaning
看看每次运行,内存降了没有
Nick大帅仔 2020-12-17
  • 打赏
  • 举报
回复
如果你是运行多次报错,那我认为是 ho_Rectangle_model没有手动释放。 如果你是单次运行报错,那我觉得是
hv_Row_find_model.Dispose(); hv_Column_find_model.Dispose(); hv_Angle_find_model.Dispose(); hv_Scale_find_model.Dispose(); hv_Score_find_model.Dispose();
这一步不要,因为是HTuple类型

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧