我一直在对网站进行一些更改,并注意到当我在数据库中进行更改时,即。添加新人值,该人的姓名不会出现在下拉列表中。
如果我重置应用程序池几次,最终会为我显示名称。虽然对其他人来说并不总是这样。
它看起来似乎受到缓存的严重控制,我发现了以下内容:
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而不会过期。
有什么想法吗?
答案 0 :(得分:1)
我不确定哪个会胜出。看来这段代码正在设置slidingExpiration和absoluteExpiration。我认为后者会赢得这个,但MSDN documentation说你应该只使用其中一个。如果使用slidingExpiration,则应将absoluteExpiration参数设置为NoAbsoluteExpiration,如果使用absoluteExpiration,则应将slidingExpiration设置为NoSlidingExpiration。
如果我是你,我会在更新值(HttpContext.Current.Cache.Remove("PersohnList")
时使缓存无效并重新重置。
答案 1 :(得分: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程序集。“