繁体   English   中英

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

[英]How to make ASP.NET Application Cache Persistent

如果我将某些内容添加到ASP.NET应用程序缓存中,它是否是持久性的,还是每隔一定时间重新加载一次?

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

在应用程序生命周期结束之前,“ MyKeyName”是否存在?

另外,应用程序缓存可用于所有会话吗? 意思是,一旦为第一个用户加载了一次,就不必为其余用户再次加载。

每个MSDN

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

您提供的示例代码

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

正在使用应用程序状态 ,而不使用应用程序缓存。 应用程序状态对应用程序缓存有很多缺点-即在应用程序池回收时丢失,它不是线程安全的,没有办法使缓存过期,也没有缓存依赖机制可以使其自动更新基础数据存储是否已更新。 应用程序状态通常被认为是一种过时的缓存技术。 有关更多详细信息,请参见应用程序状态注意事项

使用应用程序缓存 ,您可以通过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命名空间没有任何依赖关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM