2013-02-07 76 views
5

HttpContext類的CacheItems屬性有什麼區別?HttpContext的緩存和項目屬性有什麼區別?

從MSDN文檔:

緩存
獲取當前應用程序域的高速緩存對象。

物品
獲取一個密鑰/值集合可用於HTTP請求期間,組織和共享IHttpModule的接口和IHttpHandler接口之間傳輸數據。

我真的不明白該文檔試圖解釋什麼。

在處理ASP.NET Web應用程序時,我經常使用Items進行數據的每個請求緩存,以便多個用戶控件最終不會從數據庫中查找相同的數據。這在this article中描述。

今天,我遇到了Cache屬性的用法,看起來像什麼,按請求緩存。我試圖瞭解其中的差異,但找不到比較這兩者的好文件。所以我想知道...

HttpContext的緩存和項目屬性有什麼區別?請嘗試詳細說明的示例,爲什麼您會選擇在不同的真實世界場景中使用一個。

回答

10

項目是每個請求,所以它只適用於那個給定的用戶給定的HTTP請求。高速緩存存儲在內存中持續一段時間,並且不依賴於特定用戶。因此,跨多個請求可以跨多個用戶共享緩存,但每個用戶請求的項目數量不同。

這取決於你想要數據生存多久。我使用Items來存儲EF中ObjectContext或DbContext等東西,我只希望爲給定的請求共享這些東西。但是所有用戶都會在很多請求中使用參考表數據,所以緩存會更好。

+0

是否有任何關於用於分區'Cache'數據的請求?我們有一個網絡應用程序,它爲許多不同的域提供請求,每個用戶有一個域。看起來我所維護的代碼依賴於不同的域來分隔每個用戶的緩存數據。我的意思是用戶特定的數據存儲在緩存中,沒有任何用戶ID或密鑰中的任何內容。這怎麼可能工作?另外,在我鏈接的文章中,他們在'Items'鍵中使用了userID,這會讓我覺得'Items'是在很多用戶的請求中共享的。現在我比以前更困惑...... –

+0

緩存或會話,因爲會話是用戶特定的。您還可以通過將用戶ID附加到緩存鍵來使用戶特定的緩存...然後每個用戶都可以擁有自己的緩存專用條目。在您提供的文章中,他們提供的方法提供了一種方法,您可以將HttpContext.Items中的數據共享到多個用戶控件或自定義控件,但僅限於該用戶的當前請求。然後,Items集合將在每個請求上生成,因此數據將在下一個請求中再次可用。 –

相關問題