[問題] dowork & progresschanged

看板C_Sharp (C#)作者 (HangYoon)時間7年前 (2017/09/15 13:05), 7年前編輯推噓0(0017)
留言17則, 3人參與, 最新討論串1/1
大家好 小弟使用backgroundworker 用button_click啟動dowork Dowork while迴圈重複接收從MCU傳送回來的資料 每接收到一串資料後 便會使用progress report 將資料傳到Progress Changed 做資料處理及chart繪圖 在dowork內有設置一段時間等待progress changed處理完成 但整個程式執行之後 一開始progress changed處理的時間很短 (我有放一個計時器在progress changed裡面) 但隨著執行次數變多 Progress changed處理的時間也越來越長 直到progress changed處理時間超過我在dowork設定的等待時間後 整個程式就當掉不跑 圖也卡住 而在診斷工具處理序記憶體欄位 程式一開始偶爾出現GC 隨著次數增加GC出現頻率越來越高 到最後超級密集 程式也跟著當掉 想請問是否我在程式的安排上 能不能等到progress changed完全執行完畢後 再回到dowork while迴圈裡面重複執行擷取資料的動作? 或者我的程序安排本身就有錯誤? 麻煩各位先進給予指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.64.244 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1505451933.A.171.html

09/15 15:37, , 1F

09/16 13:41, , 2F
"Progress changed處理的次數也越來越長" 是因為Chart資料
09/16 13:41, 2F

09/16 13:41, , 3F
愈來愈多嗎?
09/16 13:41, 3F

09/16 18:01, , 4F
L大 不好意思我打錯了 是“時間越來越長”
09/16 18:01, 4F
※ 編輯: hangyoon (39.12.64.244), 09/16/2017 18:02:13 ※ 編輯: hangyoon (39.12.64.244), 09/16/2017 18:10:56

09/16 19:39, , 5F
為什麼時間愈來愈長?資料愈來愈多嗎?
09/16 19:39, 5F

09/16 19:40, , 6F
你可以把資料處裡也讓dowork去做,只有繪圖需要放到
09/16 19:40, 6F

09/16 19:41, , 7F
ProgressChanged裡
09/16 19:41, 7F

09/16 20:01, , 8F
每次送到progress changed的資料量都一樣
09/16 20:01, 8F

09/16 20:01, , 9F
L大 我會試試看你建議的方法
09/16 20:01, 9F

09/16 20:04, , 10F
目前dowork是做ADC值的處理 然後把值送到progress chang
09/16 20:04, 10F

09/16 20:04, , 11F
ed做我用Matlab function compiler到c# dll 方程式的處
09/16 20:04, 11F

09/16 20:04, , 12F
理 每次progress changed會做兩次matlab function的處理
09/16 20:04, 12F

09/17 00:57, , 13F
資料一樣多怎麼會愈來愈慢?用計時器看看慢在哪裡啊
09/17 00:57, 13F

09/17 10:08, , 14F
L大 我用了你的建議 把matlab function處理的動作放到do
09/17 10:08, 14F

09/17 10:08, , 15F
work裡面執行 讓progress changed裡面只處理繪圖的部分
09/17 10:08, 15F

09/17 10:08, , 16F
就解決死當的問題 已經可以長時間執行不會當掉了 真的
09/17 10:08, 16F

09/17 10:08, , 17F
很感謝你
09/17 10:08, 17F
文章代碼(AID): #1Pkr-T5n (C_Sharp)
文章代碼(AID): #1Pkr-T5n (C_Sharp)