首页 新闻 赞助 找找看

c# winform程序运行一段时间1天后,界面假死,内存不高且CPU使用率都不高,这是什么原因

0
悬赏园豆:80 [待解决问题]

Hi,

C# 做了一个Winform程序,定时 5S 上报数据给另一个系统,现在没有思路,到底是不是资源未释放导致,可是Timer 只new了一次,读文件的reader读完后也有close(),唯一怀疑点是Timer没有释放掉,已经做了LOCK保证只有一个线程,可是只new Timer一次长时间占用需要释放吗?我Timer有Close()

请大神们给思路?感谢!

1. 使用System.Timer.Timer ,定时去TextReader读一个文件夹里面更新的CSV数据,每次读取完成后,Close()

2.刚开始时没有任何问题,可是运行1 天左右,就出现UI界面无法移动的假死现象()

3. Timer每次进入后立即stop() ,文件读取完成后Close()最后才重新start()

4. 运行1天左右出现假死,任务管理器查看

         -- 程序任然Running没有未响应,

         --无法正常关闭程序

         --CPU使用率(20%)和内存(25M) 都是不高,应该不会是资源用尽导致的UI 卡死把

5. 整个UI只有一个主线程,没有更新任何Timer类的数据

6. Timer 是非托管资源,难道需要手动释放吗?可是我一直需要这个定时器,我该怎么办?

问题补充:

问题是UI主线程我还new了Timer,跑了几个月都没有问题,所以后来我在其他类中重新new了Timer 5 秒循环 上报数据给其他程序,UI 上根本没有调用新的Timer的任何数据,UI 怎么会假死

万事如意-的主页 万事如意- | 初学一级 | 园豆:93
提问于:2018-03-31 19:58

线程问题

MaxShe 5年前

@MaxShe: 可以详细说下你的见解吗?

万事如意- 5年前

触发timer_tick事件后,关闭timer,等你要执行的步骤都走完后,再开启timer,timer.enable = false; timer.enable = true;

可艺 2年前
< >
分享
所有回答(6)
0

建议用ProcessExplorer之类工具监控一下句柄数等指标

jello chen | 园豆:7306 (大侠五级) | 2018-03-31 21:04

已下载,可以句柄数太多,不确定是不是资源耗尽导致的

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-04-01 15:52
0

我也碰到过这个问题,有点怀疑是Timer的问题

新的开始 | 园豆:679 (小虾三级) | 2018-04-01 14:40

我网上也找了很久,好像问题都指向Timer,可不确定到底哪里出问题了。

所有你最后解决问题了吗? 还是单独开了一个线程就好了

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-04-01 15:33
0

基本上是非托管资源的问题。

西漠以西 | 园豆:1675 (小虾三级) | 2018-04-02 10:36

我也怀疑是非托管资源的问题,可是Timer 我用了2个, 其中一个没有问题, 这个怎么解释

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-04-02 14:19
0

我也遇到了....就一个窗口定时发送消息..第二天发现程序就死了

猝不及防 | 园豆:2731 (老鸟四级) | 2018-04-02 11:06

da那是我没用timmer我是线程循环跑的啊

支持(0) 反对(0) 猝不及防 | 园豆:2731 (老鸟四级) | 2018-04-02 11:06

@猝不及防: 单开一个线程跑也会出现这个问题吗?那怎么办?

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-04-02 14:20

@万事如意-: 定时清理,定时重启线程吧,或者直接重启这个winform

支持(0) 反对(0) 猝不及防 | 园豆:2731 (老鸟四级) | 2018-04-02 15:11

@猝不及防: 这个办法不可行的, 我这个软件重启的机会几乎为零,我想换成开线程的话会不会没有这个问题, 怎么听你的意思,开线程也有问题啊?

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-04-02 16:52

@万事如意-: 你试试呗,我开线程是有问题的

支持(0) 反对(0) 猝不及防 | 园豆:2731 (老鸟四级) | 2018-04-02 18:43

@猝不及防:果然开了线程还是会假死,之前用Timer 1天左右会卡住,现在单开线程3天左右会卡住,真的没有招了

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-04-11 20:12

@万事如意-: 定时关线程,重启线程

支持(0) 反对(0) 猝不及防 | 园豆:2731 (老鸟四级) | 2018-04-11 20:36

@万事如意-: 开线程还是卡死那就是你代码有问题了,你最好把代码贴出来,光说没意义

支持(0) 反对(0) jqw2009 | 园豆:2439 (老鸟四级) | 2018-04-18 09:40
0

 耗时的动作用线程去做吧,定时器和界面是一个线程,会卡主的

jqw2009 | 园豆:2439 (老鸟四级) | 2018-04-04 16:31

定时器不是和界面在一个线程

支持(0) 反对(0) 万事如意- | 园豆:93 (初学一级) | 2018-04-04 20:24

@万事如意-:  你在定时器里延时几秒模拟长时间数据处理,你看界面卡不卡,当然定时器也分界面定时器和线程定时器,无意外你应该用的界面上的,你自己模拟试试就知道了

支持(0) 反对(0) jqw2009 | 园豆:2439 (老鸟四级) | 2018-04-18 09:39
0

问题依然没有解决,已经重新来线程,把UI和线程分开了

万事如意- | 园豆:93 (初学一级) | 2018-07-14 00:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册