首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在asp.net httpContext.Cache中存储/检索项目的最有效方法是什么

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

Stack Overflow用户
提问于 2012-04-03 21:02:23
回答 2查看 2.6K关注 0票数 17

我有一个网站,在那里我缓存了很多信息。我看到关于在asp.net缓存中存储内容的冲突信息。

例如,假设我有这样的数据结构:

代码语言:javascript
复制
 Dictionary<string, List<Car>> mydictionary;

我可以使用字符串键将整个对象存储为"MyDictionary“,然后在取出对象后向下钻取。

代码语言:javascript
复制
 HttpContext.Cache.Add("MyDictionary",  
   mydictionary, 
   null, 
   Cache.NoAbsoluteExpiration,
   new TimeSpan(10, 0, 0),
   CacheItemPriority.Normal,
   null);

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

我可以做的另一件事是分解它,并将字典中的每个条目分别存储在缓存中(假设缓存无论如何都是一个字典)。

代码语言:javascript
复制
 Dictionary<string, List<Car>> mydictionary;

 foreach (var item in mydictionary.Keys)
 {
      HttpContext.Cache.Add(item, mydictionary[item], null, Cache.NoAbsoluteExpiration, new TimeSpan(10, 0, 0), CacheItemPriority.Normal, null);
 }

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

性能是否会有很大的不同(假设所有内容都在内存中)?

EN

回答 2

Stack Overflow用户

发布于 2012-04-09 12:17:06

正如您所说,在这方面有两种截然相反的观点。

归根结底,缓存条目可能应该在需要时存储在最细粒度的级别。我的意思是,如果你每次都使用字典中的每一个词条,那么就把它存储在字典级别。

如果您只使用字典中的一个条目,并且不遍历字典,则将它们存储在个人级别。

因此,如果您将整个集合视为单个单元,则将其作为单个单元进行缓存。如果集合是随机访问的,并且一次只需要某些项,那么在它是单个单元的级别上存储它。

票数 7
EN

Stack Overflow用户

发布于 2012-04-09 08:56:18

到目前为止,第二种方法更好。

想一想必须考虑许多对象。每次你必须得到一个值,你只需要得到它,而不是抓取入口字典,并从中获得你想要的东西。

这并不是说缓存中使用的算法对最常用的项目进行优先级排序(如果我还记得的话)。

我只是建议您在采用它作为最终实现之前,用它来测量性能增益。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9993840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档