我正在編寫一個控件,顯示頁面上的項目列表。數據庫包含(可說)與1000頁(可說)相關(多對多)的50,000個項目。緩存大量對象的方法(ASP.NET緩存vs靜態對象和單獨緩存對象vs字典)
而不是編寫一個存儲過程來從數據庫返回給定頁面的一組完整項目(即所有列,爲了水合項目對象列表),我正在考慮執行以下操作來呈現一個清單:
- 在應用程序啓動時,緩存所有上市項目
- 獲得SP爲項目
- 通過按鍵&從緩存中檢索匹配對象的列表循環只返回鍵值
初步測試表明,這比從每個頁面請求的數據庫中提供列表執行得更快。由於每個頁面請求只查找現有對象,而不是每個請求都創建一個私有列表(當流量很高,請求大頁面時內存消耗非常高),它似乎也會減少整體內存消耗。
所以現在我正在與其他開發人員討論如何實現緩存。我們已經想出了幾個選項,而這正是我將不勝感激您的意見:
- 使用ASP.NET HttpContext.Current.Cache
- 使用靜態/單身對象
在每個這些也有一個選擇是否:每個項目對象
- 緩存單獨
- 構建字典(或類似的立st)包含所有項目對象,然後緩存字典
讀取性能是主要關心的問題。維護是次要的問題 - 我們將防禦地編寫我們的GetItems方法來檢查每個項目是否在緩存中,如果沒有,從數據庫中檢索它並將其插入到緩存中。
我知道有沒有正確的答案......有利弊&缺點的一切。我只是想看看人們是否有可以分享上述任何一個方面的缺陷,或者如果任何方法突出表現爲迄今爲止表現最好的,或者特別難以合併新數據。
謝謝
+1:好問題。 –