关于winform程序运行一段时间后电脑死机问题

yjzh_td 2018-04-04 05:16:39
最近遇到了一个难题,希望可以得到大家的帮助!!!
我开发了一个winform程序,用的语言是C#。程序的作用是采集PLC内部软元件的数据。与PLC通讯采用的是三菱的MX Component组件。开发好后放到客户机上使用,发现一个问题,就是软件在运行大概六七天或者一二十天后,电脑会死机。在现场查看发现有一个错误弹窗,弹窗的标题是我的软件窗口的名字,提示:unhandled exception has occurred in your application.
但电脑已经死机,弹窗下面的 details 按钮点击不了,看不到详细信息。
请问大家,这种情况要如何处理呢?
...全文
1379 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjzh_td 2018-07-06
  • 打赏
  • 举报
回复
现在我的做法是每天凌晨1:30对软件进行自动重启工作。谢谢大家的帮助
Tiny~ 2018-04-12
  • 打赏
  • 举报
回复
和路由器固件那样,写段代码或者脚本,自定义时间点重启程序呢?比如每隔3天的凌晨3点半软件自动重启?
szsbell 2018-04-12
  • 打赏
  • 举报
回复
可能是没有及时释放资源 也可以发生错误的时候,把错误写在log中
Chasmれ 2018-04-11
  • 打赏
  • 举报
回复
可能是没有及时释放资源
巴顿的烦恼 2018-04-10
  • 打赏
  • 举报
回复
我们只是在讨论现象,而现象背后的真正原因由于无法看到你的程序,无法确诊
cheng2005 2018-04-09
  • 打赏
  • 举报
回复
最熟悉你的程序的人是你自己,别人说的这些都只是可能性而已,对你找问题说实话没什么帮助。 先理清自己程序的逻辑,再分析可能出问题的点,针对可以点进行专门的测试或者日志记录。逐步找到问题已。
yjzh_td 2018-04-08
  • 打赏
  • 举报
回复
我现在的办法就是每天对电脑进行一次重启,不过还是想把问题找出来,不然总是放不下
Jason_Mao1 2018-04-06
  • 打赏
  • 举报
回复
加一个timeout ,可能是卡住了 。
xuzuning 2018-04-05
  • 打赏
  • 举报
回复
unhandled exception has occurred in your application 应用程序发生未处理的异常 在最顶层捕获异常,并将异常信息和相关信息保存到文件,供日后分析
threenewbee 2018-04-05
  • 打赏
  • 举报
回复
有内存泄漏等,定时重启下。
bug狂人 2018-04-05
  • 打赏
  • 举报
回复
电脑死机情况有很多种,首先不排除硬件问题比如硬盘坏道,因为你说经常读写数据。如果你确定是安装了你的应用出现死机那就需要分析程序对内存的使用,或者和其他硬件交互时是否出现异常…因为没有实际经验只是分析。
yjzh_td 2018-04-05
  • 打赏
  • 举报
回复
@sp1234
如果不使用timer轮询,请问要怎么在数据库表内容有更新时更新画面呢?
还有就是轮询的方式会导致我程序遇到的问题吗?
  • 打赏
  • 举报
回复
使用轮询,并且刷新较快(例如50毫秒)容易把程序弄得越来越卡,就好像一个得了绝症的人没有办法恢复活力一样。删除轮询才能彻底清除弊端。
业余草 2018-04-05
  • 打赏
  • 举报
回复
yjzh_td 2018-04-04
  • 打赏
  • 举报
回复
@xuzuning
我更新画面只是更新了一下datagridview和chart控件,行为就是重新加载数据库里的数据。
而且电脑死机再次开机后打开程序时有很大概率出现c盘users/xxx/Appdata/local/temp文件损坏,有时能删掉,有时就只能通过开机修复来修复好。
xuzuning 2018-04-04
  • 打赏
  • 举报
回复
更新画面 时使用的对象都要释放
yjzh_td 2018-04-04
  • 打赏
  • 举报
回复
非常感谢大家的帮忙,我通过大家的解决思路再提一些问题。
@hanjun0612
我程序里调用三菱那个组件是用来采用三菱的协议与PLC通讯,这个组件把通讯细节封装好了,我只需要调用open打开,然后调用读写就好了。因为一直采集,所以不会close掉。这种情况下我要怎么释放三菱那个组件呢?
我程序里用了好几个timer,用来更新画面的。请问这个定时器需要手动释放吗?
@qq_38977664
谢谢你的解答,我用你说的方法来试试!
正怒月神 2018-04-04
  • 打赏
  • 举报
回复
我说一下我的分析。 首先,如果是程序问题,或者数据问题。那么应该只是当前程序产生异常, 这样一般不会导致机器死机 接着排除上面的可能,那可能是你的程序导致了整个电脑死机的情况。则可能是内存或者cpu爆满的问题了。 你看看是不是你调用三菱组件,但是没有手动释放的问题呢?
yjzh_td 2018-04-04
  • 打赏
  • 举报
回复
@exception1992 请问程序出现不处理的异常会导致电脑死机吗? @qq_38977664 跑几天对比内存这个如何做?看内存占用量? 我这个程序是做的比较固定的事情,就是根据时间间隔或者触发条件来采集PLC数据,然后写入数据库,并通过界面进行展示。
正怒月神 2018-04-04
  • 打赏
  • 举报
回复
根据时间间隔或者触发条件来采集PLC数据 这说明你可能使用了一个 timer之类的计时器? 然后每个线程里却没有手动释放非托管资源? 不是具体原因,我也就瞎猜猜
加载更多回复(3)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧