看板 C_Sharp 關於我們 聯絡資訊
我寫了一個呼叫某個dll的二次包裝class 然後裡面包了一個 BackgroundWorker 去 polling 別人的參數 然後記錄在這個二次包裝的class裡面 現在我想要把這些狀態顯示在gui上面 那現在方法有至少兩種 第一種是我在 form 上面再開一個 BackgroundWorker 去 polling 二次包裝的class 第二種是我在二次包裝的class上開放一個event hooker,然後在 DoWork 尾端 raise event 大家會建議用哪一種呢? 有明顯的差異性嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.235.221 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1548319368.A.7BF.html ※ 編輯: s4300026 (114.137.72.20), 01/24/2019 18:18:07
anumis: 我會選 event,單純是不想要再開1個 thread 去做同樣的事; 01/25 08:23
anumis: 說到效能,你做的東西對效能的定義是什麼?一秒幾千筆/幾 01/25 08:23
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
anumis: 我覺得你要先從架構上來看 01/26 10:46
anumis: 1. 監控的目的 (Teaching?/手動製程?),這點決定你更新的 01/26 10:46
anumis: 頻率 01/26 10:46
anumis: 2. 每個資料流擷取一筆的速度 (Motion/DIO/Camera),這個 01/26 10:46
anumis: 決定你更新的間隔 01/26 10:46
anumis: 你有了基本資料,你才能推導出你現在的pc"理論上"能做到什 01/26 10:46
anumis: 麼程度,接下來才有頭緒解更新的問題 01/26 10:46
anumis: 以你的資料來看,用一條 Thread 做更新就夠了,更新的瓶頸 01/26 10:53
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
sd016808: 看你是取資料慢還是更新GUI慢,取資料慢就用event,資 03/10 23:05
sd016808: 料都還沒更新你Polling也沒用,若是更新GUI慢就用pollin 03/10 23:05
sd016808: g,不然你取樣速度會被更新GUI卡住 03/10 23:05