前几天客户定制了一个小工具,需要循环不停的执行某一个函数,当时使用的是多线程递归调用,而且客户要求更快的响应速度,不需要 Thread.Sleep,那递归的就更快了。
结果导致程序过1,2小时就会自动闪退。
刚开始把可能出现异常的部分一个个去加固处理,防止出现异常闪退,
但是到最后还是会出现。
实在没办法,让客户把整个数据复制到本地再去调试,挂机几小时后,出现 ““System.StackOverflowException”类型的未经处理的异常出现在 mscorlib.dll 中。”
网上找了一下解决方案,才明白是函数递归了,没有释放资源,导致程序的崩溃,所以程序作了一些改动。
这里是每个线程,递归调用了本函数10次,就自动重新去创建一个新的线程。
将不再活动的线程,从List数组中删除掉,因为点停止按钮,会手工删除这些线程。
挂机试了一下,应该不会再出问题了,完美解决!!!
占用的系统内存也少了很多,挂机了很久也才40M左右。