首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

IIS 全域變數意外被清空?應用程式集區回收機制詳解與解決方案

     編輯:程式設計疑難解答

現象描述

程式呼叫 DLL 方法設定全域變數,並透過 AJAX 每 2 秒輪詢讀取,但過一段時間變數仍被清空。甚至嘗試改用 Application 物件儲存,問題依舊。

根本原因:IIS 應用程式集區自動回收

IIS 預設會在閒置或固定時間間隔回收工作進程,導致記憶體中變數(含 Application、static 變數)全部釋放。AJAX 輪詢無法阻止進程回收,因為回收由 IIS 進程管理機制觸發,非請求活動所能干預。

解決方案:調整應用程式集區設定

  1. 開啟 IIS 管理員,選取對應的應用程式集區。
  2. 點擊「進階設定」。
  3. 將 固定時間間隔(分鐘) 設為 0(停用定時回收)。
  4. 將 閒置超時(分鐘) 設為 0(停用閒置回收)。

或透過 applicationHost.config 直接修改:

<add name="MyAppPool" managedRuntimeVersion="v4.0" >
    <recycling>
        <periodicRestart time="00:00:00" />
    </recycling>
    <processModel idleTimeout="00:00:00" />
</add>

替代方案:外部化狀態儲存

若不願關閉回收機制(生產環境建議保留),應將共享狀態移至外部儲存:

  • 資料庫(SQL Server, Redis 等)
  • 分散式快取
  • 檔案系統

如此進程回收不影響資料持久性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved