場景:
系統運作于正式環境後,發現時常發生OOM (OutOfMemory),通過 Windbg dump 了幾個記憶體後發現很多緩存對象無法回收【分析過程另起新篇叙述】,于是想到如何處理緩存?
方案:
由于系統中的緩存都是采用 Hashtable 直接建立 key, value 來緩存對象,屬于 Strong Handle類型,當然第一反應就是建立 WeakReference ,是以就按照此思路重新建構了一下啊緩存
思路:
緩存基類 BigCacheItem 以 WeakReference 為基礎,其他類都是實作各自不同場景下的緩存
類名
用途
BigFastCacheItem
大資料快速緩存,減少建立對象時等待時間
FSCacheItem
檔案緩存,大對象無法緩存在記憶體中時,可以先以檔案緩存,需要時,再重新取回資料
LightCacheItem
輕量級緩存:對象可以很容易的建立時,建議采用此類
思想講玩了,直接看代碼吧。
【說明】: 代碼中很多注釋用 GhostDoc 自動生成,沒有進行校驗,不能保證其準确性
源碼下載下傳:
完整檔案下載下傳: