如果我向ASP.NET应用程序缓存添加一些东西,它是持久的还是在某个时间间隔内重新加载?
HttpContext.Current.Application["MyKeyName"] = "Some Data";
将" MyKeyName"存在直到应用程序生命结束?
此外,应用程序缓存可用于所有会话吗?这意味着,一旦为第一个用户加载一次,它就不必再为其余用户加载。
答案 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
命名空间没有任何依赖。