Re: [問題] 請問多執行緒這樣寫是否有問題?

看板C_Sharp (C#)作者 (距離...是妳經過我的時候)時間9年前 (2016/05/11 20:34), 9年前編輯推噓1(1016)
留言17則, 6人參與, 最新討論串2/2 (看更多)
我重新修改了一下程式,改成使用單一執行緒計算。 仍然是一樣的異常狀況。 我程式寫法大致如下(省略部分段落) 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做計算的方式是否有問題? -- 推 godtomanne:alt+f4沒有用? 9/10 00:18 → alt:去你媽的       9/10 00:24 噓 F4:你才沒用       9/10 00:25 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.126.14.155 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1462970072.A.2E8.html ※ 編輯: benbchung (59.126.14.155), 05/11/2016 20:39:50

05/11 21:51, , 1F
你這個MultiProcess應該要試著重用
05/11 21:51, 1F

05/11 21:59, , 2F
或是直接使用原始那一份 tempProcessImage的內容,雖然我
05/11 21:59, 2F

05/11 21:59, , 3F
沒看出哪裡用到XDDD
05/11 21:59, 3F

05/11 23:34, , 4F
請問MutiProcess試著重用是什麼意思?重新宣告嗎?
05/11 23:34, 4F

05/14 10:47, , 5F
當一個物件占用資源時,就應該試著重新使用他,而不是用
05/14 10:47, 5F

05/14 10:47, , 6F
完就丟,然後new新的。可以簡單地重新使用,或是用Pool的
05/14 10:47, 6F

05/14 10:48, , 7F
概念去管理。否則每次都調用與釋放資源,不只效能差,對記
05/14 10:48, 7F

05/14 10:48, , 8F
體也有不良影響。
05/14 10:48, 8F

05/17 22:17, , 9F
謝謝,收穫很多!
05/17 22:17, 9F

05/21 03:56, , 10F
看起來是把MainImage中的每個檔案丟到DefectFind做影像處理
05/21 03:56, 10F

05/21 03:57, , 11F
但看起來MutiProcessㄧ份就好了 不需要產生跟MainImage相同
05/21 03:57, 11F

05/21 03:58, , 12F
的物件數目 因為你是單緒 且做完工作就重建ㄧ次
05/21 03:58, 12F

05/21 04:00, , 13F
另外你的30 應該共用 Global.MaxThreadLength這個值
05/21 04:00, 13F

05/21 04:06, , 14F
另外你說Buffer會出錯的情況 num是否都不同
05/21 04:06, 14F

05/21 09:38, , 15F
如果都確認變數獨立,就要確認是否底層方法執行緒安全
05/21 09:38, 15F

06/02 21:13, , 16F
看來是memory leak問題
06/02 21:13, 16F

07/07 23:33, , 17F
好奇問第一個圖的DefectFind[ggg]為什麼要立刻設定為null
07/07 23:33, 17F
文章代碼(AID): #1NCoROBe (C_Sharp)
文章代碼(AID): #1NCoROBe (C_Sharp)