我知道大多数人推荐使用 HttpRuntime.Cache 因为它具有更大的灵活性……等等。但是如果您希望对象在应用程序的整个生命周期内都保留在缓存中怎么办?使用 Application[] 对象来缓存东西有什么大的缺点吗?
3 回答
只要您不滥用应用程序状态,那么我认为将其用于您不想过期的项目没有问题。或者,我可能会在使用它的代码附近使用静态变量。这样HttpApplicationState
,如果我想访问我的数据,您就可以避免通过然后被迫引用 System.Web。
但请务必考虑如何使用您存储的对象HttpApplicationState
。如果它是一个DataSet
你不断为每个请求添加东西的地方,那么在某些时候你最终会在网络服务器上消耗太多的内存。如果您HttpApplicationState
在处理请求时继续添加项目,也会发生同样的情况,在某些时候您将强制应用程序重新启动。
这可能是在您的情况下使用 Cache 的优势。消耗大量内存并不那么致命,因为当内存变得稀缺时,您允许 ASP.NET 释放缓存中的项目。
缓存已弃用应用程序。如果您需要具有应用程序范围的东西,那么您应该将其创建为类的静态成员或使用缓存。如果您想使用 Cache 路由但不希望它过期,则应在将值插入缓存时使用 CacheItemPriority.NotRemovable 选项。请注意,可以使用此优先级并仍然使用缓存依赖项,例如,如果您的数据依赖于文件系统中的某些内容。CacheItemPriority 所做的只是防止 HttpRuntime.Cache 在感到内存压力时智能地清除项目,并使用其最近最少使用的算法来清除没有太多使用的项目。
当您希望项目自动过期或在内存不足时被回收时,请使用缓存。否则,如果可以,请使用静态变量,因为它们会产生比挖掘 ApplicationState 集合更好的性能。我不确定什么时候使用 ApplicationState,但肯定会有一些。