1.長(zhǎng)期無(wú)用戶訪問(wèn)網(wǎng)頁(yè),asp.net 會(huì)自動(dòng)進(jìn)入Application_End事件(時(shí)間長(zhǎng)短可以配置IIS)
2.修改web.config文件
3.刪除該站點(diǎn)下的文件夾之后,會(huì)自動(dòng)進(jìn)入Application_End
4.修改了bin目錄下的文件
5.重啟IIS
IIS 7 應(yīng)用程序池自動(dòng)回收關(guān)閉的解決方案
如果你正在做ASP.NET,那肯定會(huì)用到IIS 如果你想在ASP.NET Application中加入某個(gè)定時(shí)任務(wù),那想必一定是用一個(gè)線程在不停地做定時(shí)計(jì)算那假設(shè)我們?cè)谧约旱腁SP.NET應(yīng)用程序中加入了Quartz.NET框架,并且配置等等都OK了。這個(gè)站點(diǎn)訪問(wèn)量很少,現(xiàn)在只有幾個(gè)人上班的時(shí)候才會(huì)使用,結(jié)果第二天過(guò)來(lái)一看,后臺(tái)調(diào)度的線程和計(jì)算任務(wù)都停止了,如果你抓取了Application_End事件,會(huì)發(fā)現(xiàn)這個(gè)事件居然被調(diào)用了。
那一定是IIS的應(yīng)用程序池回收的機(jī)制在作怪了。因?yàn)镮IS的默認(rèn)設(shè)置里面,如果一個(gè)站點(diǎn)所處的應(yīng)用程序池超過(guò)一段時(shí)間沒(méi)有被訪問(wèn)或者請(qǐng)求,IIS就會(huì)自動(dòng)回收這個(gè)程序池,并且把進(jìn)程殺掉。那進(jìn)程里面的線程肯定也活不下來(lái)了。
但是我們可以通過(guò)設(shè)置應(yīng)用程序池參數(shù)使其不會(huì)被簡(jiǎn)單的自動(dòng)回收(有些情況無(wú)法避免,比如熱部署的站點(diǎn),錯(cuò)誤數(shù)量超限等等)
在IIS中找到這個(gè)站點(diǎn)所用的程序池,點(diǎn)擊“高級(jí)設(shè)置...” 在打開(kāi)的列表中更改以下設(shè)置:
回收——固定時(shí)間間隔(分鐘) 改為 0
——虛擬/專用內(nèi)存限制(KB) 改為 0
進(jìn)程模型——閑置超時(shí)(分鐘) 改為 0 這樣子,一般情況下程序池就不會(huì)被自動(dòng)回收了,后臺(tái)一些簡(jiǎn)單的計(jì)算線程就會(huì)正常工作
|