Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 理解HttpContext.Current.Cache_C#_Asp.net_Httpcontext.cache - Fatal编程技术网

C# 理解HttpContext.Current.Cache

C# 理解HttpContext.Current.Cache,c#,asp.net,httpcontext.cache,C#,Asp.net,Httpcontext.cache,我一直在对一个站点进行一些更改,并注意到当我在数据库中进行更改时,即添加一个新的person值,该人员的姓名不会出现在下拉列表中 如果我重置应用程序池几次,该名称最终会为我显示。虽然对其他人来说并不总是如此 它似乎受到缓存的严格控制,我发现: HttpContext.Current.Cache.Insert("PersohnList", d, Nothing, DateTime.MaxValue, New System.TimeSpan(0, 30, 0), Ca

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

如果我重置应用程序池几次,该名称最终会为我显示。虽然对其他人来说并不总是如此

它似乎受到缓存的严格控制,我发现:

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而过期


有什么想法吗?

我不确定哪一个会赢。这段代码似乎正在设置slidingExpiration和absoluteExpiration。我认为后者会在这方面获胜,但他们说你应该只使用其中一个。如果使用slidingExpiration,则应将absoluteExpiration参数设置为,如果使用absoluteExpiration,则应将slidingExpiration设置为


如果我是你,我只会在更新值时使缓存无效(HttpContext.Current.cache.Remove(“PersohnList”),然后再次重置它。

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

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


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

您是否显式缓存列表?我认为默认情况下不会缓存列表。它最初是如何初始化的?如果它被填充的,比如说Page_Load,那么在每次刷新/新建会话时,它都会进行数据库调用。如果您将其保存在服务器端的某个位置,这是一个完全不同的问题。您是否阅读了MSDN页面?以及事实它在多次重置应用程序池后仍能生存听起来你的问题是在客户端而不是服务器端进行缓存。Tbh..不确定哪一个会赢。我将接受你的回答,因为我不确定两个都需要设置..根据MSDN,无论如何。决定重新处理缓存列表的工作方式。尽管重置应用程序池清除浏览器上的缓存确实有效。我想我注意到了一个错误,这可以解释为什么我会有这个问题。