2016-06-11 92 views
-1

如果我將某些內容添加到ASP.NET應用程序高速緩存中,它是持久性還是在某個時間間隔內重新加載?如何使ASP.NET應用程序高速緩存持久

HttpContext.Current.Application["MyKeyName"] = "Some Data"; 

將「MyKeyName」存在直到應用程序的壽命結束?

此外,應用程序緩存可用於所有會話是否正確?這意味着,一旦它爲第一個用戶加載一次,就不必爲其餘的用戶再次加載。

回答

1

MSDN

使用應用程序緩存與使用應用程序狀態。但是,與應用程序狀態不同,應用程序高速緩存中的數據是易失性的,這意味着它不會在應用程序的整個生命週期中存儲在內存中。使用應用程序緩存的優點在於,ASP.NET管理緩存並在項目過期或失效時或內存不足時移除項目。您還可以配置應用程序緩存,以在項目被移除時通知您的應用程序。欲瞭解更多信息,請參閱Caching Application Data

的示例代碼您正在使用Application State,不使用應用程序緩存提供

HttpContext.Current.Application["MyKeyName"] = "Some Data"; 

。應用程序狀態對應用程序緩存有許多缺點 - 即應用程序池回收時會丟失,它不是線程安全的,無法使緩存過期,並且沒有緩存依賴性機制可以自動更新如果底層數據存儲更新。應用程序狀態通常被認爲是過時的緩存技術。有關更多詳細信息,請參閱Application State Considerations

use the application cache,您將通過HttpContext.Cache屬性訪問它。請注意,在MVC中,HttpContext在大多數地方都可用,因此您應該避免使用靜態HttpContext.Current訪問器。

// Get 
var value = this.HttpContext.Cache["MyKeyName"]; 

// Set 
this.HttpContext.Cache.Insert(
    "MyKeyName", 
    value, 
    null, 
    DateTime.Now.AddMinutes(5), 
    System.Web.Caching.Cache.NoSlidingExpiration, 
    System.Web.Caching.CacheItemPriority.NotRemovable, 
    null); 

還有.NET 4的新的緩存選項:System.Runtime.Caching,它類似於應用程序緩存,但沒有對System.Web命名空間的依賴。

+0

感謝您的回覆。基本上我試圖做的是在應用程序啓動時加載一些數據,這些數據將在整個應用程序中供所有用戶使用並共享,直到應用程序池重新啓動。數據將是隻讀的,所以我忽略了「非線程安全」方面的原因。你認爲使用ApplicationState是最好的解決方案嗎?或者你能否指點我一些更好方法的例子? – WebDev999

+0

我從來沒有使用過ApplicationState。它是傳統ASP和AFAIK的延續,它只是爲了向後兼容這個陳舊的框架。在應用程序的整個生命週期中加載太多數據會降低可伸縮性,但對於少量應用程序來說就沒有問題。你可以使用ApplicationState,但我建議使用上面的解決方案(只需用'System.Web.Caching.Cache.NoAbsoluteExpiration'替換第四個參數)或'System.Runtime.Caching'。也就是說,最好使用[按需重新加載的解決方案](http://stackoverflow.com/a/32726827/181087)。 – NightOwl888

相關問題