.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){},
但如果是递归调用,则可能会出现堆溢出的错误.
如果程序进入一个死循环,那么对于系统来说应该不知道它在死循环中,它只是在处理自己应该处理的事情,是不是死循环也就不好判断了.也没有判断是否死循环的条件.
------解决方案--------------------时间不是问题,我的循环跑过三天的。