作者hangyoon (HangYoon)
看板C_Sharp
标题[问题] dowork & progresschanged
时间Fri Sep 15 13:05:30 2017
大家好
小弟使用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://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1505451933.A.171.html
2F:→ Litfal: "Progress changed处理的次数也越来越长" 是因为Chart资料09/16 13:41
3F:→ Litfal: 愈来愈多吗?09/16 13:41
4F:→ hangyoon: L大 不好意思我打错了 是“时间越来越长”09/16 18:01
※ 编辑: hangyoon (39.12.64.244), 09/16/2017 18:02:13
※ 编辑: hangyoon (39.12.64.244), 09/16/2017 18:10:56
5F:→ Litfal: 为什麽时间愈来愈长?资料愈来愈多吗? 09/16 19:39
6F:→ Litfal: 你可以把资料处里也让dowork去做,只有绘图需要放到 09/16 19:40
7F:→ Litfal: ProgressChanged里 09/16 19:41
8F:→ hangyoon: 每次送到progress changed的资料量都一样 09/16 20:01
9F:→ hangyoon: L大 我会试试看你建议的方法 09/16 20:01
10F:→ hangyoon: 目前dowork是做ADC值的处理 然後把值送到progress chang 09/16 20:04
11F:→ hangyoon: ed做我用Matlab function compiler到c# dll 方程式的处 09/16 20:04
12F:→ hangyoon: 理 每次progress changed会做两次matlab function的处理 09/16 20:04
13F:→ Litfal: 资料一样多怎麽会愈来愈慢?用计时器看看慢在哪里啊 09/17 00:57
14F:→ hangyoon: L大 我用了你的建议 把matlab function处理的动作放到do 09/17 10:08
15F:→ hangyoon: work里面执行 让progress changed里面只处理绘图的部分 09/17 10:08
16F:→ hangyoon: 就解决死当的问题 已经可以长时间执行不会当掉了 真的 09/17 10:08
17F:→ hangyoon: 很感谢你 09/17 10:08