变量使用前使用后都要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;
的区别