C#程序经常崩溃中断的处理方法讨论

skyofmy 2009-05-20 10:31:21
最近做了个C#的多线程多任务程序,不过很多用户用了, 有部分用户程序经常无故中断,程序崩溃,直接就关了,实在搞不清什么原因
本人本机测试(酷锐1.8,2G内存):开50任务,共1000多线程,运行24小时不出问题
垃圾电脑测试(P42.4,256内存):开6任务,共700线程,运行24小时不出任何问题

奇怪有些人(注内存都不低于1G,所开线程总数少于500),问题多多,有的内存不能为READ,有些是.NET的程序需要关闭提示框,反正开会程序就强关了,而且这问题站总用户的20%左右(所以不会是偶然,应该主要方面也不是用户电脑或系统的问题),,

我个人认为 可能程序本身有问题,但不会是主要,因为很多电脑是能稳定运行,应该是.NET本身存在的缺陷(个人觉得微软的东西好用但稳定性都是有问题)特求哪些高人能提出些解决的方法的思路,能有一种强健的容错机制,而不是依赖不可靠的 TRY CATCH等..
...全文
867 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
mywwl 2009-06-02
  • 打赏
  • 举报
回复
我也有个程序有这种怪现象,用代码:
try
{
Application.Run(new mainwin());
}
catch (Exception er)
{
MessageBox.Show(er.Message + "\n" + er.StackTrace);
}
也无法拦截到崩溃信息
qiweihero 2009-06-02
  • 打赏
  • 举报
回复
程序本身就有问题,加上代码的 冗余,很容易溃崩,
有时候这些是不能避免的。。。其实写个日志功能
可以更好的清楚是什么错误,从而更好的解决错误
zhaoweiting0609 2009-06-02
  • 打赏
  • 举报
回复
写日志,把输入输出和错误都写进日志,还有时间
这样跟踪一下日志就能解决问题
liudanking 2009-06-02
  • 打赏
  • 举报
回复
同意 加个写日志功能 这样问题从日志分析就知道原因了。
光宇广贞 2009-06-02
  • 打赏
  • 举报
回复
有的内存不能READ是谁的内存不能READ?
强制退出是非法内存的操作。

总之,是对内存的非法操作问题……但你是如何操作的呢?
gui0605 2009-06-02
  • 打赏
  • 举报
回复
估计是有异常你没有捕捉到,程序就自动退出了,仔细检查下
  • 打赏
  • 举报
回复
只是遇到过多线程在待机操作时再次运行崩溃了
andrewbornglobal 2009-05-26
  • 打赏
  • 举报
回复
帮顶
qldsrx 2009-05-26
  • 打赏
  • 举报
回复
看来再讨论也没得结果,毕竟没有代码,凭空说会崩溃,怀疑.NET本身存在的缺陷,但就算是那样,也肯定可以通过程序来弥补这样的缺陷。所以看不到代码的情况下就帮不上忙了,闪人。
newdigitime 2009-05-25
  • 打赏
  • 举报
回复
是20%的电脑硬件在高负荷下工作不稳定,特别是内存与CPU.
skyofmy 2009-05-25
  • 打赏
  • 举报
回复
应该就是内存泄漏了,,最近看了很多书,按.NET的原来托管资源肯定没问题,应该是出在非托管上
只是有的系统出,有的系统没问题,再研究研究,,最近改进了对非托管资源的管理些情况好多了
EsMo 2009-05-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 skyofmy 的回复:]
showyoumymercy 如果停止了对控件信息的显示,那软件又怎么显示任务情况啊,,
程序本身都是托管代码,,无指针之类的引用,,2G内存溢出应该不可能吧,
另外,程序中加了强制垃圾回收的GC.colect()(应该就这个,拼写记不清了)出内存不能为READ的就多了,如果不加这句就会少很多,,
[/Quote]

我推荐从DatagridView 等有数据绑定的控件入手考虑 即使 你后台更新了数据源 前台也会刷新 所以也是属于多线程刷新
steven_007 2009-05-20
  • 打赏
  • 举报
回复
最好加个日志功能,看看系统出错是什么原因。
qldsrx 2009-05-20
  • 打赏
  • 举报
回复
按理说不会有内存不能Read的问题,因为C#是安全的代码,除非你用了C#的指针。另外线程问题是不好调试的,或者说调试器不支持多线程,你只能自己捕获异常,并反馈给主线程,这是必须的,毕竟主线程都可能有异常。
富莱工作室 2009-05-20
  • 打赏
  • 举报
回复
"本人本机测试(酷锐1.8,2G内存):开50任务,共1000多线程,运行24小时不出问题 "
"垃圾电脑测试(P42.4,256内存):开6任务,共700线程,运行24小时不出任何问题 "

这并不能说明你程序没问题, 在 "NET本身存在的缺陷" 和 "你的程序有问题" 两者之间,
我更愿意选后者, 呵呵

要解决这样的问题, 确实比较麻烦, 最好的办法是找到正崩溃的程序, 调试或远程调试,
最次的方法是将每个线程堪入到
try
{
........
}
catch(Exception e)
{
保存信息
}

然后查看信息
柳晛 2009-05-20
  • 打赏
  • 举报
回复
不能read..
lock?不明白。
hecker728 2009-05-20
  • 打赏
  • 举报
回复
帮顶,问题有点大
柳晛 2009-05-20
  • 打赏
  • 举报
回复
C#稳定性没问题吧,这是我见过的最安全的语言了。
xutao888 2009-05-20
  • 打赏
  • 举报
回复
可能是内存泄露
wei125706526 2009-05-20
  • 打赏
  • 举报
回复
太深奥了,目前不懂,帮顶下,希望有高人可以替你解决。。。
加载更多回复(8)

110,533

社区成员

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

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

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