程式呼叫 DLL 方法設定全域變數,並透過 AJAX 每 2 秒輪詢讀取,但過一段時間變數仍被清空。甚至嘗試改用 Application 物件儲存,問題依舊。
IIS 預設會在閒置或固定時間間隔回收工作進程,導致記憶體中變數(含 Application、static 變數)全部釋放。AJAX 輪詢無法阻止進程回收,因為回收由 IIS 進程管理機制觸發,非請求活動所能干預。
0(停用定時回收)。0(停用閒置回收)。或透過 applicationHost.config 直接修改:
<add name="MyAppPool" managedRuntimeVersion="v4.0" >
<recycling>
<periodicRestart time="00:00:00" />
</recycling>
<processModel idleTimeout="00:00:00" />
</add>
若不願關閉回收機制(生產環境建議保留),應將共享狀態移至外部儲存:
如此進程回收不影響資料持久性。