如何使ASP.NET应用程序缓存持久化

时间:2016-06-11 02:55:01

标签: c# asp.net asp.net-mvc caching

如果我向ASP.NET应用程序缓存添加一些东西,它是持久的还是在某个时间间隔内重新加载?

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

将" MyKeyName"存在直到应用程序生命结束?

此外,应用程序缓存可用于所有会话吗?这意味着,一旦为第一个用户加载一次,它就不必再为其余用户加载。

1 个答案:

答案 0 :(得分:1)

MSDN

  

使用应用程序缓存类似于使用应用程序状态。但是,与应用程序状态不同,应用程序缓存中的数据是易失性的,这意味着它在应用程序的生命周期内不会存储在内存中。使用应用程序缓存的优点是ASP.NET管理缓存并在项目过期或失效时或内存不足时删除项目。您还可以配置应用程序缓存,以在删除项目时通知您的应用程序。有关详细信息,请参阅Caching Application Data

您提供的示例代码

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

正在使用Application State,而不是使用应用程序缓存。应用程序状态对应用程序缓存有许多缺点 - 即它在应用程序池循环时丢失,它不是线程安全的,没有办法使缓存过期,并且没有缓存依赖机制使其自动更新如果底层数据存储已更新。应用程序状态通常被认为是一种过时的缓存技术。有关详细信息,请参阅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命名空间没有任何依赖。