2010-08-13 81 views
4

在asp.net中,主要數據存儲是應用程序,會話,我們也有對象緩存。 我已經使用常識提示/提示(例如,永遠不要把用戶的具體數據放在應用程序中,從不將非託管資源放在會話中等等),但老實說,我從來沒有遇到任何建議和例子,何時使用MSDN中的內容或者來自像Haack和Gu這樣的知名人物,他們將三者結合在一起(例如,Google第一次將MSDN應用作爲全局緩存進行討論,如果是這種情況,對象緩存是什麼?ASP.net應用程序會話緩存最佳實踐和模式

另外,很少討論的是場景中的比較,例如我知道它容易不必要地加載內存使用過度使用會話,但如果您使用對象緩存作爲替代存儲相同數據會發生什麼?

編輯:This是的st迄今爲止發現的信息:http://msdn.microsoft.com/en-us/library/ff647787.aspx

回答

2

使用會話存儲用戶特定的信息,因爲框架自動將每個會話存儲與特定用戶相關聯。

使用對象高速緩存可以緩存一次並在整個應用程序或一組用戶中重複使用的信息。如果將用戶特定的數據存儲在對象高速緩存中,則必須創建一些機制來關聯高速緩存條目。這不僅需要代表你做額外的工作,而且你可能會這樣做,這會增加惡意用戶以某種方式做類似於會話欺騙的可能性。

我不知道你什麼時候需要使用Application對象。如果我沒有弄錯,Application對象比其他任何東西都更像是經典ASP的遺蹟。

另一種可以同樣重要的緩存形式是通過HttpContext.Items集合的每個請求緩存。這允許您在請求的整個生命週期中緩存數據,並且在單個請求期間(例如來自頁面上的不同用戶控制)請求相同的數據時非常有用。有關此方法的更多信息,請參閱HttpContext.Items - a Per-Request Cache Store

0

我會建議創建一個包裝類,至少對於會話,如果這些會在整個代碼中使用。這樣,您可以注入一個類的實例來完成實際的工作,並使用模擬版本進行單元測試。我爲一個廣泛使用會話的大型項目做了這個工作,結果很好。

您可以將其與外觀模式相結合 - 包裝將提供您需要的特定方法,而不是暴露常規界面。作爲一個例子,會話接受對象並返回對象,但它不是強類型的。包裝器可以有強類型的添加和獲取方法。