日期:2014-05-20  浏览次数:21636 次

.net framework是如何判断程序进入死循环的?
最近在做一个系统的时候,制作了一个死循环的线程来不停的扫描数据库,获得数据后发送出去;

但是在运行了2个小时左右的时候就会出错;
我自己重新写了一个测试的程序,在短时间内不停的循环调用;   结果5分钟左右就会被判断为死循环,然后出错;

后来将程序改为运行一段时间以后,就关闭当前线程,然后重新再开始一个新线程;这个办法可以基本解决2小时左右死掉的问题,但是这个重起的时间在不同的机器上好像还不一样;

.net   framework框架是如何判断一个线程处于死循环中,要如何避免呢?
在制作这种扫描的程序的时候要如何进行这种类似死循环的制作?   大家帮帮忙了。多谢


------解决方案--------------------
有可能是你运行这个死循环的线程长时间占用较大的cpu资源,你可以把线程的优先级降低一些
------解决方案--------------------
一般的死循环不会造成出错,比如while(true){},

但如果是递归调用,则可能会出现堆溢出的错误.


如果程序进入一个死循环,那么对于系统来说应该不知道它在死循环中,它只是在处理自己应该处理的事情,是不是死循环也就不好判断了.也没有判断是否死循环的条件.
------解决方案--------------------
不了解,帮顶
------解决方案--------------------
如果你的是死循环,在递归中,最终将产生StackOverflowException,单纯的一个死循环将产生OutOfMemoryException,出现异常了,当然就知道了!
------解决方案--------------------
我觉得判断是否一个程序可能是一个死循环是程序员的任务,而不是系统,对于一个程序,如果可能会出现死循环,只能说程序写的不到位或是测试的不到位.这就相当于程序的隐患,是应该绝对避免的.
------解决方案--------------------
捕获System.StackOverflowException,基本上就可以肯定是死循环了。
http://topic.csdn.net/t/20050622/00/4098002.html
------解决方案--------------------
也就是说,与你的计算时间没有关系,而是与其所耗用的内存有关,如果循环很快就耗用完了可用的内存,当然很快就出错了,假设你的循环每次耗用100M内存,你看看可以循环几次,需要多长时间?呵呵
------解决方案--------------------
出错的信息是什么,这个错可能和你说的原因不一样.
------解决方案--------------------
不大可能的,像写SOCKET程序,一直循环那挂个半天不也要出现你所说的错误了

可能并不是这个原因,我觉得
------解决方案--------------------
有可能是你的线程操作界面控件了,在VS2005环境下如果不使用Invoke,这样会出错,觉得有这种出错的可能.
------解决方案--------------------
2个程序的出错原因一样吗?
------解决方案--------------------
估计原因不在程序,
如果是程序原因,根本就不会运行2个小时,编译完以后就不能运行
所以有可能是其他的原因导致。或许应该检查下是否有其他程序干扰,或者一些脏数据所致
------解决方案--------------------
楼主,.net他是会自动判断你的一段代码是否是死循环的,如果是的话他会自动结束掉你的程序,你只需要在循环过程中添加一个sleep几秒的代码,就基本可以解决了。
------解决方案--------------------
一般的死循环不会造成出错,比如while(true){},

但如果是递归调用,则可能会出现堆溢出的错误.


如果程序进入一个死循环,那么对于系统来说应该不知道它在死循环中,它只是在处理自己应该处理的事情,是不是死循环也就不好判断了.也没有判断是否死循环的条件.
------解决方案--------------------
时间不是问题,我的循环跑过三天的。