使用Thread创建出来的属于IIS的一个线程,当我在Application_Start中创建一个线程,是一个死循环,每1分钟运行一次,会不会被IIS回收?  我测试了一下,几分钟内没问题,不知道时间长了会不会回收了这个线程或出现其他的问题,有知道的吗?

解决方案 »

  1.   

    web的程序一般用得比较少,适用处理比较大量的数据,使用多个线程处理,要注意线程同步的问题
    没有人访问超过时间IIS回收应用程序池,线程就没了
      

  2.   

    嗯,我看iis里面的应用程序池有定时回收,定点回收,他们回收都是回收什么东西?应该是那些确实没用的变量,函数,数据还是iis自认为没用的东西?比如我程序一启动就启动一个线程,这个线程每30秒操作一次,这种情况这个线程会被回收吗?
      

  3.   


    我在iis设置5分钟回收。但测试了下发现,没有别回收
      

  4.   

    会被回收,IIS里Timeout的设置,意思是是如果20分钟(默认)没有Request,就会回收进程。进程没有,application_start里启动的线程也没有了。你的需求听起来像一种检查任务,常规做法是放到Windows service中。或者Console程序,用计划任务启动。
      

  5.   

    下面的方法个人认为不是很好:1. 
    IIS 自动回收导致后台定时器失效的解决方法
    http://www.veryhuo.com/a/view/9186.html
    2. 
    在IIS manager里设置。在Application pool的属性的perfromance页里的Idle Timeout下uncheck Shutdown worker processes after being idle for (time in minutes).
      

  6.   

    你最好用 Timer 不推荐用 死循环, 这个东西 耗资源的,
      

  7.   

    对,是一个检测任务,这个任务不需要耗费很多资源,只是简单的几个判断,我也想做成windows service,但客户基本都是虚拟空间,没有服务器的操作权限,只能以这种方式解决了。嗯,我测试了下,如果长时间没有访问,是会被回收了,但如果有一个用户访问,那么那个线程是不是又会自动重启?这样理解对吗?
      

  8.   

    嗯,多谢了,第一条就是我现在遇到的问题,应用程序关闭后再模拟http请求打开它,我的没这么麻烦,因为有用户操作才会改变内部属性,所以简单的多了,谢谢你了