【Halcon 内存泄漏记录 - C#】

1. Bitmap 转 HImage

由于Bitmap 在转化时使用BitmapData数据,BitmapData数据无法Dispose, 所以在使用时,使用using:

            try
            {
                using (Bitmap b = bmp.Clone() as Bitmap)
                {
                    if (bmp == null)
                    {
                        image = null;
                        return;
                    };
                    Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
                    BitmapData srcBmpData = b.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format8bppIndexed);
                    HObject _image;

                    HOperatorSet.GenImage1(out _image, "byte", b.Width, b.Height, srcBmpData.Scan0);
                    image = new HImage(_image);
                    _image.Dispose();
                    b.UnlockBits(srcBmpData);
                    srcBmpData = null;
                }
            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
                Console.WriteLine(ex.Source);
                Console.WriteLine(ex.StackTrace);
                image = null;

            }

2. new 之后要Dispose()

HObject obj = new HObject(image);
HOperatorSet.ZoomImageFactor(obj, out hoImageZoomed, scaleR, scaleC, "constant");
obj.Dispose();

不能直接使用

HOperatorSet.ZoomImageFactor(new HObject(image), out hoImageZoomed, scaleR, scaleC, "constant");

3. 切换配方后,内存会增加

切换配方时,会重新添加检测界面模块,需要先释放

tabPageSettingList.ForEach(b => b.Dispose());
tabPageSettingList.Clear();

4. Parallel.For 嵌套Parallel.For, 会出现问题

5. 图像预处理使用需要注意不能直接在原有变量上赋值

image = image.ScaleImageMax();

改为

   HImage scaleImg = new HImage();
   if (image != null)
   {
       scaleImg = image.ScaleImageMax();
   }
   .....
   scaleImg.Dispose();

6. 谨慎使用ConcatObj() 存储NG或者OK区域

当OK或者NG太多时,大分辨率图像下会导致内存暴增,并且运行速度缓慢
解决方案:

  1. 若可以,请使用Union,将区域连接在一起,当成一个区域;
  2. 若存在不同缺陷,可以多定义几个变量,分开合并;
  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值