2012-05-25 63 views
5

當我需要在應用程序中緩存某些東西時,我曾經選擇Web.Caching.Cache。但我遇到了一些使用HttpApplicationState的遺留代碼。何時使用HttpApplicationState而不是Web.Caching.Cache?

由於Web.Caching.Cache更強大和更靈活(看起來更多),是否有更好的使用HttpApplicationState的情況?

我會很感激,如果你能告訴我一些例子:-)

+0

我從不使用ApplicationState。我認爲這是更多的遺留代碼(舊ASP天) – TGH

+0

@TGH http://msdn.microsoft.com/en-us/library/system.web.httpapplicationstate.aspx仍然在4.0人 – rhapsodyn

+0

是的,我想它仍然存在,但我不記得我考慮過使用它的時間。我想我能想到的唯一優點是它永不過期...... – TGH

回答

13

兩個HttpApplicationState和Web.Caching.Cache可用於存儲可在整個ASP.Net應用程序在全球訪問信息。但是,它們具有非常不同的用途。

HttpApplicationState用於存儲通常不會更改的應用程序數據。它通常在應用程序啓動時填充到global.asax的Application_Start中。我個人並沒有太多用處,但我相信它通常用於存儲對應用程序的所有用戶來說都是全局應用程序的小應用程序配置,並且這些應用程序配置不會很少更改或更改。放入應用程序狀態的東西將無限期地保留在那裏,直到應用程序回收。但是,當它再次回收並重新啓動時,Application_State將再次執行並重新填充它。

重要的是要注意Application State是一個單例,並且不是線程安全的。因此,當您對其進行更改時,必須通過調用Application.Lock()和Application.UnLock()來鎖定和解鎖Application對象。

實際上有三種不同的方式可以緩存ASP.Net內容:頁面級別,局部頁面和數據。我將要討論數據緩存,因爲我認爲這與您的問題最爲相關。 ASP.Net緩存用於存儲大量的應用程序數據,這些數據對於每個請求從數據存儲中檢索會很昂貴。ApplicationState和Cache之間的主要區別在於:1)緩存數據旨在過期並從內存中清除通過各種觸發器或條件(時間,其他緩存依賴性等),而ApplicationState將永遠存在,直到應用程序回收爲止; 2)如果服務器正在經歷嚴重的內存壓力,則可以從內存中清除緩存數據,因此您永遠不會指望它在那裏,並且必須經常測試以確定它是否存在,而ApplicationState將始終存在。

緩存用於存儲更接近於應用程序的數據,不需要從每個請求的數據庫中提取數據。緩存旨在存儲大量數據,而智能緩存體系結構可以對性能產生巨大的積極影響。

+0

現在我很確定我可以使用Cache而不是HttpApplicationState,謝謝你 – rhapsodyn

+5

如果你使用的是.NET 4.0或更高版本,你可以在ASP.NET或.NET項目中使用System.Runtime.Caching.MemoryCache。 http://msdn.microsoft.com/en-us/library/dd997357.aspx – bounav

相關問題