Re: [问题] 请问多执行绪这样写是否有问题?

楼主: benbchung (距离...是妳经过我的时候)   2016-05-11 20:34:28
我重新修改了一下程式,改成使用单一执行绪计算。
仍然是一样的异常状况。
我程式写法大致如下(省略部分段落)
1.
用一个主执行绪重复乎叫MutiProcess这个类别的物件做计算(如下图)
http://imgur.com/kXiKOrR
2.
MutiProcess这个类别再创建ProcessClass 这个类别的物件(名称ImageProcess,如下图)
http://imgur.com/v48Y3KA
主执行绪while循环重复跑数百数千次之后(频率不一定),会出现异常。
几乎都是ProcessClass里面的私有的影像BUFFER被清空(该buffer上一行还很正常使用)
或是ProcessClass里面的私有影像buffer在该某一function中突然变成其他function
才会做的处理状况(异常时我用VC的外挂工具看Buffer内容发现的)。
因为ProcessClass这个类太庞大了,暂时不贴。
想先请板上的前辈帮我看一下,我这样一直new class做计算的方式是否有问题?
作者: Litfal (Litfal)   2016-05-11 21:51:00
你这个MultiProcess应该要试着重用或是直接使用原始那一份 tempProcessImage的内容,虽然我没看出哪里用到XDDD
楼主: benbchung (距离...是妳经过我的时候)   2016-05-11 23:34:00
请问MutiProcess试着重用是什么意思?重新宣告吗?
作者: Litfal (Litfal)   2016-05-14 10:47:00
当一个物件占用资源时,就应该试着重新使用他,而不是用完就丢,然后new新的。可以简单地重新使用,或是用Pool的概念去管理。否则每次都调用与释放资源,不只效能差,对记体也有不良影响。
楼主: benbchung (距离...是妳经过我的时候)   2016-05-17 22:17:00
谢谢,收获很多!
作者: VVll (李奥纳多皮卡丘)   2016-05-21 03:56:00
看起来是把MainImage中的每个档案丢到DefectFind做影像处理但看起来MutiProcessㄧ份就好了 不需要产生跟MainImage相同的物件数目 因为你是单绪 且做完工作就重建ㄧ次另外你的30 应该共用 Global.MaxThreadLength这个值另外你说Buffer会出错的情况 num是否都不同
作者: new1011 (AJAY)   2016-05-21 09:38:00
如果都确认变量独立,就要确认是否底层方法执行绪安全
作者: disabledman (m.m.)   2016-06-02 21:13:00
看来是memory leak问题

Links booklink

Contact Us: admin [ a t ] ucptt.com