如何在C++/C#中进行Halcon对象的垃圾回收?
|
由于.NET 中是让垃圾收集器Garbage Collector (简称GC)删除未使用的对象。但是,由于GC只是不时地删除未使用的对象,因此同时使用的内存会增加。更重要的是,对于GC来说,HALCON 的标志性变量(图像、区域……)似乎相当“小”,因为它们只包含对(在许多情况下相当大)标志性对象的引用数据库。因此,GC可能不会释放这些变量,即使它们不再被使用。因此,您可能需要强制删除(未使用的)对象。有两种方法可以做到这一点:
第一种方式:手动调用GC
比如每次处理运行后在计时器事件中完成:- private void Timer_Tick(object sender, System.EventArgs e)
- {
- Action();
- GC.Collect();
- GC.WaitForPendingFinalizers();
- }
复制代码 在托管 C++ 应用程序中调用GC的代码是:- GC::Collect();
- GC::WaitForPendingFinalizers();
复制代码 第二种方式:通过调用Dispose()方法手动处理单个对象- HImage Image = new HImage("fuse");
- ...
- Image.Dispose();
复制代码 除了减少内存消耗,手动处理对象的另一个原因是释放资源,例如,关闭与图像采集设备或串行接口的连接。
如果要以确定的方式释放引用的资源,则还需要释放包含句柄的 HTuple实例。
请注意,HALCON 运算符总是为输出参数和返回值创建一个新的对象实例(但不是在修改调用实例的“类构造函数”运算符调用中)。如果变量已经初始化,它的旧内容(以及为其分配的内存)仍然存在,直到GC将其删除。如果你想手动删除它,你必须在给它分配一个对象之前调用Dispose 。
来源:https://www.cnblogs.com/amosyang/archive/2023/01/03/17023224.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|
|
|
发表于 2023-1-4 10:12:07
举报
回复
分享
|
|
|
|