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

关于C# halcon内存泄漏的研究

开发环境:Win7 VS2002 halcon12, 直接运行Debug的exe

不释放


 private void butTemp_Click(object sender, EventArgs e)
        {
            HOperatorSet.SetSystem("clip_region", "false");
            HObject region;
            HOperatorSet.GenEmptyRegion(out region);
            for (int i = 0; i < 1000; i++)
                for (int j = 0; j < 10000; j++)
                {
                    HObject tmpRegion;
                    HOperatorSet.GenRectangle1(out tmpRegion, i, j, i, j);
                    HOperatorSet.Union2(tmpRegion, region, out region);
                }
            HTuple tArea, tmp;
            HOperatorSet.AreaCenter(region, out tArea, out tmp, out tmp);
            Debug.Assert(tArea > 0);

            TestForm form = new TestForm();
            form.ShowDialog();
        }
不到一分钟运行结束,最多占用1G内存,运行结束占用800M内存。


释放tmpRegio


private void butTemp_Click(object sender, EventArgs e)
        {
            HOperatorSet.SetSystem("clip_region", "false");
            HObject region;
            HOperatorSet.GenEmptyRegion(out region);
            for (int i = 0; i < 1000; i++)
                for (int j = 0; j < 10000; j++)
                {
                    HObject tmpRegion;
                    HOperatorSet.GenRectangle1(out tmpRegion, i, j, i, j);
                    HOperatorSet.Union2(tmpRegion, region, out region);
                    tmpRegion.Dispose();
                }
            HTuple tArea, tmp;
            HOperatorSet.AreaCenter(region, out tArea, out tmp, out tmp);
            Debug.Assert(tArea > 0);

            TestForm form = new TestForm();
            form.ShowDialog();
        }
不到一分钟运行结束,最多占用0.5G内存,运行结束占用0.5G 内存。


释放region


private void butTemp_Click(object sender, EventArgs e)
        {
            HOperatorSet.SetSystem("clip_region", "false");
            HObject region;
            HOperatorSet.GenEmptyRegion(out region);
            for (int i = 0; i < 1000; i++)
                for (int j = 0; j < 10000; j++)
                {
                    HObject tmpRegion;
                    HOperatorSet.GenRectangle1(out tmpRegion, i, j, i, j);
                    HOperatorSet.Union2(tmpRegion, region, out region);
                    tmpRegion.Dispose();
                }
            HTuple tArea, tmp;
            HOperatorSet.AreaCenter(region, out tArea, out tmp, out tmp);
            Debug.Assert(tArea > 0);
            region.Dispose();

            TestForm form = new TestForm();
            form.ShowDialog();
        }
几乎没变化,还是0.5G左右


释放bak 


private void butTemp_Click(object sender, EventArgs e)
        {
            HOperatorSet.SetSystem("clip_region", "false");
            HObject region;
            HOperatorSet.GenEmptyRegion(out region);
            for (int i = 0; i < 1000; i++)
                for (int j = 0; j < 10000; j++)
                {
                    HObject tmpRegion;
                    HOperatorSet.GenRectangle1(out tmpRegion, i, j, i, j);
                    HObject bak = region;
                    HOperatorSet.Union2(tmpRegion, region, out region);
                    bak.Dispose();
                    tmpRegion.Dispose();
                }
            HTuple tArea, tmp;
            HOperatorSet.AreaCenter(region, out tArea, out tmp, out tmp);
            Debug.Assert(tArea > 0);
            region.Dispose();

            TestForm form = new TestForm();
            form.ShowDialog();
        }
不到一分钟运行结束,内存几乎没增加,不到20M以内。


结论

 Union2的出参和入参一致时,必须手动释放,这样才能100% 马上回收内存。

相关文章:

关于C# halcon内存泄漏的研究

开发环境&#xff1a;Win7 VS2002 halcon12&#xff0c; 直接运行Debug的exe 不释放 private void butTemp_Click(object sender, EventArgs e) { HOperatorSet.SetSystem("clip_region", "false"); HObject region; …...

高精度地图定位在高速公路自动驾驶系统中的应用

近年来随着汽车保有量不断增加&#xff0c;随之而来的是: ( 1) 严重的交通拥堵&#xff0c;通行效率低下&#xff0c;用在通行上的时间不断增加; ( 2) 交通事故频发&#xff0c;交通事故导致的伤亡人数和费用不断增加&#xff0c;而且绝大多数事故是由人为因素导致的; ( 3) 大气…...

【Apollo学习笔记】——规划模块TASK之SPEED_HEURISTIC_OPTIMIZER

文章目录 前言SPEED_BOUNDS_PRIORI_DECIDER功能简介SPEED_BOUNDS_PRIORI_DECIDER相关配置SPEED_BOUNDS_PRIORI_DECIDER流程1. 对路程和时间进行采样以及速度限制2. 设计状态转移方程&#xff08;cost计算&#xff09;2.0 CalculateCostAt代价计算2.1 GetObstacleCost障碍物cost…...

R语言APRIORI关联规则、K-MEANS均值聚类分析中药专利复方治疗用药规律网络可视化...

全文链接&#xff1a;http://tecdat.cn/?p30605 应用关联规则、聚类方法等数据挖掘技术分析治疗的中药专利复方组方配伍规律&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 方法检索治疗中药专利复方&#xff0c;排除外用中药及中西药物合用的复方。最近我们…...

3. MySql 5.7安装方式

服务器ip数据库版本硬件要求10.1.1.31mysql-boost-5.7.31.tar.gz2G/40G,内存不够需要开swap空间10.1.1.32mysql-boost-5.7.31.tar.gz2G/40G关闭swap swapoff -a && sed -i ‘/ swap / s/^(.*)$/#\1/g’ /etc/fstab 安装依赖 yum -y install make cmake gcc gcc-c++ bis…...

Flink 如何定位反压节点?

分析&回答 Flink Web UI 自带的反压监控 —— 直接方式 Flink Web UI 的反压监控提供了 Subtask 级别的反压监控。监控的原理是通过Thread.getStackTrace() 采集在 TaskManager 上正在运行的所有线程&#xff0c;收集在缓冲区请求中阻塞的线程数&#xff08;意味着下游阻…...

LeetCode-1005-K次取反后最大化的数组和-贪心算法

题目描述&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数组 可能的最大和 。 …...

Linux内核源码分析 (5)多处理器调度

Linux内核源码分析 (5)多处理器调度 文章目录 Linux内核源码分析 (5)多处理器调度注&#xff1a;本章节使用的内核版本为Linux 5.6.18一、 SMT和NUMA1、SMP (对称多处理器结构)2、NUMA &#xff08;非一致内存访问结构&#xff09; 二、多核调度三、调度域和调度组四、SMP调度详…...

华为云云服务器评测|华为云云耀云服务器L实例使用教学

文章目录 教学小故事 教学 华为云云耀云服务器L实例是一款提供高效、可靠、安全的基础设施服务的云服务器。下面是使用教学&#xff1a; 登录华为云官网。 测评产品链接&#xff1a;https://www.huaweicloud.com/product/hecs-light.html 进入云耀云服务器管理控制台&#xf…...

这个在线网站让你三分钟制作出一份精美简历

今天&#xff0c;我要向大家推荐一个神奇的在线工具网站&#xff0c;它能够提供免费简历模板、简历范文&#xff0c;支持在线编辑&#xff0c;并且一键下载为PDF。这个工具让你的简历制作变得轻松便捷&#xff01; 首先&#xff0c;这个网站的简历模板非常丰富多样。无论你是刚…...

Sql 函数传递参数 字符串拼接

使用场景 一个计算价格的函数&#xff0c;多个存储过程调用&#xff0c;因业务需求经常要新增参数&#xff0c;避免修改函数时程序执行存储过程报错&#xff0c;将多个参数拼接为一个字符串传递 -- 调用函数CalcuPrice(UnitPrice,CONCAT(MFQZC,MFQZC,&ItemNum,ItemNum,&am…...

java八股文面试[多线程]——两个线程交替打印1-100之间的数字

一份代码&#xff0c;两个线程&#xff0c;使用synchronize实现&#xff1a; 重写run()方法&#xff0c;将输出1到100之间整数的代码写到同步方法里。线程1进入到同步方法&#xff0c;输出一个整数后&#xff0c;阻塞并释放锁。线程2进入到同步方法&#xff0c;唤醒线程1&…...

gRPC之gRPC认证

1、gRPC认证 前面篇章的gRPC都是明文传输的&#xff0c;容易被篡改数据&#xff0c;本章将介绍如何为gRPC添加安全机制。 gRPC默认内置了两种认证方式&#xff1a; SSL/TLS认证方式 基于Token的认证方式 同时&#xff0c;gRPC提供了接口用于扩展自定义认证方式。 1.1 TLS…...

简易虚拟培训系统-UI控件的应用3

目录 Button组件的组成 Button组件方法1-在Button组件中设置OnClick()回调 Button组件方法2-在脚本中添加Button类的监听 上一篇使用了文件流读取硬盘数据并显示在Text组件中&#xff0c;本篇增加使用按钮来控制显示哪一篇文字信息。 Button组件的组成 1. 新建Button&#…...

语言模型(language model)

文章目录 引言1. 什么是语言模型2. 语言模型的主要用途2.1 言模型-语音识别2.2 语言模型-手写识别2.3 语言模型-输入法 3. 语言模型的分类4. N-gram语言模型4.1 N-gram语言模型-平滑方法4.2 ngram代码4.3 语言模型的评价指标4.4 两类语言模型的对比 5. 神经网络语言模型6. 语言…...

【3.Vue子组件调用父组件方法】

1.概述 使用组件建抛出事件的方式来调用父组件的方法&#xff0c;不直接用this.$parent.function的方法&#xff0c;当然这种方式是可以的。 2.代码实现 2.1 父组件代码 父组件写一个方法给子组件调用 // 设备点击事件// equipId:设备id// leftValue:left值// topValue:top…...

算法系列-876-求链表的中间节点

求链表中间节点&#xff0c;如果有两个中间节点取后面那个 链表定义 // lc codestart /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(…...

h5 ws 客户端 监听ws服务器广播的信息

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>AI智能写作</title><!-- Bootstrap CSS --><meta charset"utf-8"><meta name"viewport" content"widt…...

网络基础之重中之重

目录 IP协议 ​编辑 基本概念&#xff1a; 协议头格式&#xff1a; ​编辑 网段划分 DHCP &#xff1a; CIDR&#xff1a; 特殊的IP地址&#xff1a; IP地址的数量限制&#xff1a; 私有IP和公网IP 路由 路由的过程&#xff1a; 数据链路层 认识以太网&#x…...

HarmonyOS应用开发者-----基础认证试题及答案

HarmonyOS应用开发者基础认证试题及答案 试题会不定时刷新,本试题仅供大家学习参考 【判断题】 2.5/2.5 所有使用@Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。 正确(True)错误(False) 回答正确【判断题】 2.5/2.5 在Column和Row容器组…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...