Csharp/C#教程:页面刷新后HttpContext.Current.Cache项为null分享


页面刷新后HttpContext.Current.Cache项为null

我有一个C#网页,我在其中使用HttpContext.Current.Cache在服务器缓存中存储List 对象。 第一页加载后,对象将保存在缓存中。 当我刷新页面时,缓存对象为空。 有什么想法吗?

另外,我想设置一个“工作”来每30分钟重新创建一个对象。 我想在创建新版本之前提供缓存版本,然后用新版本替换旧版本。 我怎么做?

在我的Global.asax中,在Application_Start中,我有以下内容:

HttpRuntime.Cache.Insert("MainADList", Uf.GetUsers(), null, Cache.NoAbsoluteExpiration, TimeSpan.FromMinutes(30)); 

当我需要它时,我会做以下事情:

  MainADList = (Users)HttpRuntime.Cache["MainADList"]; 

其中大部分是null。 不总是,但几乎总是。

即使使用Cache.NoAbsoluteExpiration + Cache.NoSlidingExpiration填充缓存,ASP.NET也可以从缓存中删除项目(即:当空闲系统内存不足时)。

CacheItemPriority.NotRemovable传递给Cache.Insert()以防止发生这种情况。 在MSDN上查找CachéItemPriority。

长时间空闲,web.config /二进制更改等重新启动IIS应用程序池也将擦除您的缓存。 检查其他SOpost,HttpRuntime.Cache.Insert()不保存缓存值

关于创建作业以刷新缓存; 我认为最好的Cache策略没有经验法则。 它将在很大程度上取决于您的用户与您的网页的交互方式,频率,并发时间,以及特别是在未点击缓存时生成数据所需的时间。

如果生成数据所花费的时间对于任何用户都是不可接受的,则可以设置刷新缓存的作业,但其间隔应小于生成/检索所采用的缓存TTL +时间的总和。 例如,如果您的缓存为30米并且生成数据需要2米,则刷新间隔必须为28米或更短,以避免任何用户点击空缓存。

你可以使用System.Runtime.Caching 。 这样你就不依赖于HttpRuntime命名空间了。

我怀疑你是因为网络服务器重启而.Net正在清除它。 做一些事情会更好吗?

上述就是C#学习教程:页面刷新后HttpContext.Current.Cache项为null分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

  public List GetUsers() { var cache = System.Runtime.Caching.MemoryCache.Default; if (cache["MainADList"] == null) { // Rebuild cache. Perhaps for Multithreading, you can do object locking var cachePolicy = new System.Runtime.Caching.CacheItemPolicy() { AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(30) }; var users = Uf.GetUsers(); cache.Add(new System.Runtime.Caching.CacheItem("MainADList", users), cachePolicy); return users; } return cache["MainADList"] as List; } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/950902.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐