内存释放以及工作记录

变量使用前使用后都要dispose!

1、变量用完之后,Dispose()和置Null。
C#会把hobject当成一个小内存占用对象,我的猜测是halcon对hobject中只是包装了一个指针,然后C#语言无法将其识别为像bitmap那样的对象,所以只要有hobject的地方都要谨慎考虑内存释放问题。例如HOperatorSet.GenEmptyObj(out ho_Image); 这个应该是去申请内存的,然后使用先和使用后都要dispose,hobject就是一个封装的指针对象。
在Halcon18以上版本,Halcon已经提供了Dispose()方法进行释放,那么在低版本中HTuple类型占用的内存怎么释放呢?其实,Halcon中提供一个叫UnPinTuple()的方法,该方法就是官方用来进行释放HTuple的!所以,使用后的变量如不再继续使用的可以用该方法进行清除释放。
2、图像尽量不要复制,固定在一个变量进行处理。
3、在软件内存占用率高,并且软件闲置的时候,调用Gc去清理。即:用完halcon对象,除了要dispose; 同时还需要用timer,去定时 GC.Collect()。
4、不要用同一个变量作为输入和输出变量。
5、HObject 都不需要调用dispose,c# 用gc回收就可以了,除非你大量生成对象,这样需要自己及时回收
6、C#中临时Hobject对象每次用完养成手动释放的习惯就行,其他变量释放不用管,在全局线程或定时器中加入C#自动回收资源代码就行

                HOperatorSet.ClearAllMetrologyModels();
                HOperatorSet.ClearAllShapeModels();

DataGridViewComboxCell值无效 的原因

困住一个小时左右

问题就在于DataGridViewComboxCell DataSource赋值的问题

 string vRet = Operation(combox.Value.ToString(), vs);
                            if (vRet.Contains("|"))
                            {
                                List<string> tempValuesRet = vRet.Split('|').ToList();
                                tempValuesRet.Insert(0, "[....]");
                                DataGridViewComboBoxCell comboxretvRet = new DataGridViewComboBoxCell();
                                comboxretvRet.DataSource = null;
                                comboxretvRet.DataSource = tempValuesRet.ToArray();
                                comboxretvRet.Value = tempValuesRet[0];
                                this.dataGridViewAnalysis.Rows[a].Cells[4] = comboxretvRet;
                            }

comboxretvRet.DataSource = tempValuesRet.ToArray();

comboxretvRet.DataSource = tempValuesRet;

的区别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值