c# 定位内存快速增长_C#和halcon的混编程序出现序内存泄露、句柄持续增加、视觉程序运行越来越慢等问题的处理...

这个话题非常重要。勇哥苦于手中的项目遇到这样的问题。

这些问题表现是:

(1)视觉程序内存占用会越来越大。这种内存变大通常是缓慢变大,几天不关机持续运行的话,大到几个G也不稀罕。通常,急速内存变大要容易找到问题些,最怕的是缓慢变大。

(2) 视觉程序会越运行越慢,会影响设备的PPM。通常工厂里的电脑一辈子不会关机,你可别指望他们会每班给你重启软件一次。

(3)程序句柄越来越多,大至几万都有可能。这是一种什么概念呢?你的windows启动后,会发现所有程序的句柄都不会超过6000个,而你的程序就有几万个!

(4)程序的CPU时间高。这种情况下设备运行也会越来越慢。有些程序甚至占用CPU时间跟北京时间走得一样准。这是一种什么概念? 你打开一个记事本,敲几个小时的字,CPU占用时间可能才几秒。

上述问题堪称自动化行业内的常见病。老板和工程师都为它头痛。

先来介绍几个重要的系统进程相关参数,它们分别是:CPU时间

线程

句柄

内存

页面错误

在window10的任务管理器中,它们是通“详细信息”页面的选择列来调出的。见下图。

勇哥就用手中的一个项目,边学习边记录处理这类问题的心得。

这个程序运行后,CPU占有率25%,这个对于四核的Cpu来说,这相当于一个cpu已经被完全占用了。

另一个参数CPU时间,看上去跟北京时间还快。

经检查,下面这几段代码有问题

修改成下面这个样子。

现在CPU占有率正常了, cpu时间也正常了(仅仅是在程序启动后,不运行生产逻辑的阶段cpu时间正常了。但是本程序运行带视觉的生产逻辑后还是会有cpu占用时间多的问题)。

通常cpu占有率高这个比较容易处理,一般是While循环中没有考虑线程睡眠,释放cpu占用。

cpu时间这个是不太好处理的,在这里只是处理程序启动后不运行生产逻辑时的cpu时间高这个问题。

接下来研究一下比较艰难的部分,就是句柄与内存占用持续上升。

勇哥这个项止是基于halcon视觉的,存在每拍照处理一次内存会飙升的问题。另外一个是句柄数也会持续上对于句柄的概念,勇哥认为是win32编程里的一个概念,在win32 api里面,许多api都handle这个参数,可以理解句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数。

如果句柄越来越高,则可以推测程序存在对象一直被创建却没有及时释放的隐患。

下图是勇哥启动程序时的内存与句柄数量,初始值,方便和后面的对照。

经过一次视觉拍照处理后,变成下面这么多

内存增加了88M,句柄增加了35个。</

  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值