基本操作
| 操作 | 語法 | 說明 |
| 寫入 | Application["Key"] = value; 或 Application.Add("Key", value); | 鎖定集合,執行緒安全 |
| 讀取 | var val = Application["Key"]; 或 Application.Get("Key") | 需轉型 |
| 更新 | Application.Set("Key", newValue); | 同寫入 |
| 移除單鍵 | Application.Remove("Key"); | |
| 清空全部 | Application.RemoveAll(); 或 Application.Clear(); | |
核心特性
- 儲存位置: 伺服器記憶體(進程內)。
- 作用範圍: 整個應用程式域,所有使用者共享。
- 生命週期: 首次請求建立,應用程式關閉(回收、重啟、修改 web.config)銷毀。
- 型別限制: 任意物件(參考型別、值型別均可)。
- 大小限制: 理論無上限,受限於可用記憶體。
執行緒安全模式
// 寫入
Application.Lock();
try { Application["Counter"] = (int)Application["Counter"] + 1; }
finally { Application.UnLock(); }
// 讀取(通常無需鎖定,但複雜邏輯建議)
Application.Lock();
try { var cnt = Application["Counter"]; }
finally { Application.UnLock(); }
ASP.NET Core 已移除 Application,改用 IMemoryCache、IDistributedCache 或 IOptionsSnapshot。
適用場景與反模式
| ✅ 適合 | ❌ 不適合 |
| 全站共用設定(如網站名稱、維護模式旗標) | 大量用戶個人化資料(用 Session/資料庫) |
| 低頻變更的緩存資料(如字典表、選單結構) | 高頻寫入計數器(用 Redis/資料庫原子操作) |
| 啟動時載入的靜態資源 | 需跨伺服器同步的資料(用分散式緩存) |
效能與安全注意
- 避免存放大型物件(DataSet、大型集合),佔用記憶體導致 GC 壓力與回收。
- 資料永遠在伺服端,相對安全,但不加密敏感資訊(連線字串、金鑰)。
- 應用程式池回收會清空資料,啟動時需重新載入(可在
Application_Start 初始化)。