加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

在asp.net httpContext.Cache中存储/检索项目最有效的方法是什么

发布时间:2020-12-16 00:33:13 所属栏目:asp.Net 来源:网络整理
导读:我有一个网站,我缓存了很多信息。我在asp.net缓存中存储东西时看到有冲突的信息。 例如说我有这样的数据结构: Dictionarystring,ListCar mydictionary; 我可以用“MyDictionary”的字符串键存储整个东西,然后在我拉出对象时向下钻
我有一个网站,我缓存了很多信息。我在asp.net缓存中存储东西时看到有冲突的信息。

例如说我有这样的数据结构:

Dictionary<string,List<Car>> mydictionary;

我可以用“MyDictionary”的字符串键存储整个东西,然后在我拉出对象时向下钻取。

HttpContext.Cache.Add("MyDictionary",mydictionary,null,Cache.NoAbsoluteExpiration,new TimeSpan(10,0),CacheItemPriority.Normal,null);

 var myDict = HttpContext.Cache["MyDictionary"] as Dictionary<string,List<Car>>;

我可以做的另一件事就是把它分解出来,将每个项目分别存储在缓存中(给出缓存是一个字典)。

Dictionary<string,List<Car>> mydictionary;

 foreach (var item in mydictionary.Keys)
 {
      HttpContext.Cache.Add(item,mydictionary[item],null);
 }

 var myitem = "test";
 var myDict = HttpContext.Cache[myItem] as List<Car>;

表现意义是否会非常不同(假设我假设一切都在记忆中?)

解决方法

在这里添加一个额外的答案,因为我觉得现有的一个捕获“什么”,但不够的“为什么”。

最好将单独条目存储在缓存中的原因与perf无关。相反,它与允许系统执行适当的内存管理有关。

在ASP.NET缓存中有很多逻辑来弄清楚当它运行到内存压力时该怎么做。最后,它需要踢出一些项目,它需要以最小的破坏性方式做到这一点。选择哪些项目可以踢出来,这取决于最近是否被访问了很多。还有其他因素,比如在缓存时间里传递的标志。例如你可以使一个物品不可移动,它永远不会被踢出来。

但是回到这个问题,如果你把整个字典存储成一个单独的项目,你只需要把两个选项留给ASP.NET内存管理器:保持整个事物的存在,或者杀死整个事情。即您完全失去了将“热”项目保留在缓存中的好处,而您很少访问的内存占用项目被踢出。换句话说,你失去任何级别的缓存粒度。

当然,您可以选择在字典中实现自己的方案来删除很少使用的项目。但是在这一点上,您正在重新创造轮子,而且您的新车轮将不会奏效,因为它不会与系统的其余部分协调。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读