翼度科技»论坛 编程开发 .net 查看内容

如何在C++/C#中进行Halcon对象的垃圾回收?

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
由于.NET 中是让垃圾收集器Garbage Collector (简称GC)删除未使用的对象。但是,由于GC只是不时地删除未使用的对象,因此同时使用的内存会增加。更重要的是,对于GC来说,HALCON 的标志性变量(图像、区域……)似乎相当“小”,因为它们只包含对(在许多情况下相当大)标志性对象的引用数据库。因此,GC可能不会释放这些变量,即使它们不再被使用。因此,您可能需要强制删除(未使用的)对象。有两种方法可以做到这一点:
第一种方式:手动调用GC
比如每次处理运行后在计时器事件中完成:
  1. private void Timer_Tick(object sender, System.EventArgs e)
  2. {
  3.   Action();
  4.   GC.Collect();
  5.   GC.WaitForPendingFinalizers();
  6. }
复制代码
在托管 C++ 应用程序中调用GC的代码是:
  1. GC::Collect();
  2. GC::WaitForPendingFinalizers();
复制代码
第二种方式:通过调用Dispose()方法手动处理单个对象
  1. HImage  Image = new HImage("fuse");
  2.   ...
  3. Image.Dispose();
复制代码
除了减少内存消耗,手动处理对象的另一个原因是释放资源,例如,关闭与图像采集设备或串行接口的连接。
如果要以确定的方式释放引用的资源,则还需要释放包含句柄的 HTuple实例。
请注意,HALCON 运算符总是为输出参数和返回值创建一个新的对象实例(但不是在修改调用实例的“类构造函数”运算符调用中)。如果变量已经初始化,它的旧内容(以及为其分配的内存)仍然存在,直到GC将其删除。如果你想手动删除它,你必须在给它分配一个对象之前调用Dispose 。

来源:https://www.cnblogs.com/amosyang/archive/2023/01/03/17023224.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具