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