当前位置: 首页 > news >正文

C#+Halcon 检测稳定性提升的方式

前言

众所周知,C#是一个带垃圾回收机制的语言,开发过程中不需要考虑垃圾回收,你就可劲造吧。但我们在设计图像处理软件时,应时刻对图像等大内存资源进行管控,做到自行管控,及时释放,不应将其交由GC进行回收,遵循C++的开发原则

实际开发过程中,若全部图像都由GC进行回收,会导致以下两点问题:

1)内存波动性大,CPU处理密集时,内存会呈现断崖式起伏

2)算法检测时间极其不稳定,由于GC时回收大内存导致

所以开发过程中,应遵循以下几个原则:

一、谁用谁销毁

自己创建对象(Image/Region/XLD/ObjectModel3D等),谁创建的谁销毁(前提是外部不需要使用的情况),自行使用完及时执行Dispose操作



            HImage image = new HImage("byte", 16384, 3000);
            HRegion region = image.Threshold((double)0, 255);

            //do someting

            region.Dispose();
            image.Dispose();

二、谁用谁新建

假设说某处创建的对象,另一处需要使用,另一处的应自己new一份进行使用,使用完毕后自己Dispose掉(halcon在设计时大部分对象都是采用智能指针的方式,不会消耗额外的内存)


            HImage image = new HImage("byte", 16384, 3000);
            HRegion region = image.Threshold((double)0, 255);

            HImage userImage = new HImage(image);
            HImage userRegion = new HImage(region);

            region.Dispose(); //及时释放
            image.Dispose();

            //user do something
            userImage.Dispose(); //用完后释放
            userRegion.Dispose();

三、能复用地址就少创建图片

能尽量复用原有指针的情况下,就少进行内存新建,重复额外的内存开销是没必要的

参考:C#+Halcon 垂直拼接/裁切避免频繁开辟内存-CSDN博客

相关文章:

  • docker:配置 Docker 镜像加速器
  • 计算机毕业设计SpringBoot+Vue.js校园网上店铺(源码+文档+PPT+讲解)
  • Webpack分包与合包深度解析
  • 面试基础--Spring Boot启动流程及源码实现
  • 【AI】【Unity】关于Unity接入DeepseekAPI遇到的坑
  • 全网独家:zabbixV7版本容器服务器无法访问Postgres V17数据库的问题解决
  • 启智平台华为昇腾910B 运行DeepSeek Janus-Pro-7/1B
  • 高并发应用分层架构
  • C#调用Ni板卡进行实现采集任务(模拟量输入输出)示例1
  • 分布式事务【整理、总结】
  • 请解释 HTTP 中的状态码,常见的状态码有哪些?
  • C++ 学习(八)(模板,可变参数模板,模板专业化(完整模板专业化,部分模板专业化),类型 Traits,SFINAE(替换失败不是错误),)
  • MyBatis框架之映射文件加载方式
  • Notepad++ 8.6.7 安装与配置全攻略(Windows平台)
  • Python-04BeautifulSoup网络爬虫
  • IO学习day3
  • 【Java 基础】-- 设计模式
  • SLAM评估工具安装及使用EVO(Ubuntu20.04安装evo)--缺少 onnx 库还有Pandas 版本不兼容解决
  • C/C++输入输出(1)
  • huggingface镜像站hf-mirror的各大AI模型文件下载
  • 做围棋死活题的网站/品牌推广经典案例
  • 承德的网站建设公司/cpa推广联盟平台
  • 珠海移动网站建设报价/seo页面优化的方法
  • 温州市建设工程管理网站/免费男女打扑克的软件
  • 做二手家具回收哪个网站好/微信视频号可以推广吗
  • 襄阳市建设工程质量监督站网站/百度推广渠道代理