1

我一直在对网站进行一些更改,并注意到当我在数据库中进行更改时,即。添加新的人员值,该人员的姓名不会出现在下拉列表中。

如果我多次重置应用程序池,这个名称最终会出现在我面前。尽管对其他人似乎并不总是如此。

它似乎确实受到缓存的严重控制,我发现了以下内容:

HttpContext.Current.Cache.Insert("PersohnList", d, Nothing, 
       DateTime.MaxValue, New System.TimeSpan(0, 30, 0), 
       Caching.CacheItemPriority.High, Nothing)

我注意到这里有一些值得关注的值,

a)  DateTime.MaxValue  
b)  New System.TimeSpan(0, 30, 0)

缓存会在 30 分钟后过期并插入新人的姓名,还是不会因为 DateTime.MaxValue 而过期。

有任何想法吗?

4

2 回答 2

1

我不确定哪个会胜出。似乎这段代码正在设置slidingExpiration和absoluteExpiration。我假设后者会在这方面获胜,但MSDN 文档说你应该只使用一个或另一个。如果使用slidingExpiration,则应将absoluteExpiration 参数设置为NoAbsoluteExpiration,如果使用absoluteExpiration,则应将slidingExpiration 设置为NoSlidingExpiration

如果我是你,我只会在更新值时使缓存无效(HttpContext.Current.Cache.Remove("PersohnList")并再次重置它。

于 2014-11-20T17:13:42.800 回答
0

+1 用于滑动窗口。每次另一个用户触摸该键“PersohnList”时,缓存过期时间就会增加 30 分钟。另外,请查看 System.Runtime.Caching 作为更现代的替代方案。

来自http://msdn.microsoft.com/en-us/library/system.runtime.caching%28v=vs.110%29.aspx

“System.Runtime.Caching 命名空间包含允许您在 NET Framework 应用程序中实现缓存的类型。

此命名空间中的类提供了一种使用类似于 ASP.NET 中的缓存设施的方法,但不依赖于 System.Web 程序集。”

于 2014-11-20T17:39:10.290 回答