作者s4300026 (s4300026)
看板C_Sharp
標題[問題] 更新GUI用event還是polling比較好?
時間Thu Jan 24 16:42:45 2019
我寫了一個呼叫某個dll的二次包裝class
然後裡面包了一個 BackgroundWorker 去 polling 別人的參數
然後記錄在這個二次包裝的class裡面
現在我想要把這些狀態顯示在gui上面
那現在方法有至少兩種
第一種是我在 form 上面再開一個 BackgroundWorker 去 polling 二次包裝的class
第二種是我在二次包裝的class上開放一個event hooker,然後在
DoWork 尾端 raise event
大家會建議用哪一種呢?
有明顯的差異性嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.235.221
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_Sharp/M.1548319368.A.7BF.html
※ 編輯: s4300026 (114.137.72.20), 01/24/2019 18:18:07
1F:推 anumis: 我會選 event,單純是不想要再開1個 thread 去做同樣的事; 01/25 08:23
2F:→ anumis: 說到效能,你做的東西對效能的定義是什麼?一秒幾千筆/幾 01/25 08:23
3F:→ anumis: 百 mb 的資料? 01/25 08:23
是沒有那麼誇張,但是也不算非常少了,
兩張卡控制14個馬達,兩張DIO,兩個相機(20FPS * 5MB *2 )
如果要全部監控到GUI,就是14+2+2個thread在做狀態 polling
如果GUI不採用event,thread數量就 *2 (感覺我已經自問自答了?)
算一下好像還真的有破100MB ~.~"
但只是全部都是相機惹的禍...
目標就是不要掉FPS,然後GUI不要LAG
※ 編輯: s4300026 (60.250.235.221), 01/25/2019 09:32:39
4F:推 anumis: 我覺得你要先從架構上來看 01/26 10:46
5F:→ anumis: 1. 監控的目的 (Teaching?/手動製程?),這點決定你更新的 01/26 10:46
6F:→ anumis: 頻率 01/26 10:46
7F:→ anumis: 2. 每個資料流擷取一筆的速度 (Motion/DIO/Camera),這個 01/26 10:46
8F:→ anumis: 決定你更新的間隔 01/26 10:46
9F:→ anumis: 你有了基本資料,你才能推導出你現在的pc"理論上"能做到什 01/26 10:46
10F:→ anumis: 麼程度,接下來才有頭緒解更新的問題 01/26 10:46
11F:推 anumis: 以你的資料來看,用一條 Thread 做更新就夠了,更新的瓶頸 01/26 10:53
12F:→ anumis: 會是在相機 01/26 10:53
你說的沒有錯,正常來說只要一個thread就夠了
說實話,GUI更新超級快,一點意義也沒有,人們也不在乎,也反應不過來
目前的問題在於 抓取 的行為要怎麼樣只寫一次就夠了?
我一個GUI,配一個馬達
thread 開一個,然後進行一對一更新
但如果我今天有 14 個馬達,就算我只更新當前顯示的 GUI
那我也要撰寫 event 或 polling 的方法
那我的 event 或 polling 方法要寫 14次嗎?
如果不想寫 14 次
那就包裝成class
那就會遇到 hook 14 次比較好,還是多產生 14 個 polling thread 比較好?
※ 編輯: s4300026 (60.250.235.221), 03/09/2019 17:07:24
13F:推 sd016808: 看你是取資料慢還是更新GUI慢,取資料慢就用event,資 03/10 23:05
14F:→ sd016808: 料都還沒更新你Polling也沒用,若是更新GUI慢就用pollin 03/10 23:05
15F:→ sd016808: g,不然你取樣速度會被更新GUI卡住 03/10 23:05