作者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/cn.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