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