在asp.net httpContext.Cache中存储/检索项目最有效的方法是什么
我有一个网站,我缓存了很多信息。我在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内存管理器:保持整个事物的存在,或者杀死整个事情。即您完全失去了将“热”项目保留在缓存中的好处,而您很少访问的内存占用项目被踢出。换句话说,你失去任何级别的缓存粒度。 当然,您可以选择在字典中实现自己的方案来删除很少使用的项目。但是在这一点上,您正在重新创造轮子,而且您的新车轮将不会奏效,因为它不会与系统的其余部分协调。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET Web应用程序 – WebResource.axd和ScriptResource.
- asp.net-mvc – 在EF CF中添加/更新导航属性
- asp.net-mvc – ascx和.cshtml有什么区别?
- asp.net – 自定义HttpModule在IIS7中集成,但不是经典模式
- asp.net – 获取Azure Web App实例ID
- asp.net – IE10中的LinkBut??tons不执行回发
- ASP.NET MVC类级自定义数据注释和ModelState键
- ASP.NET MVC – 使用jQuery不显眼的验证来阻止提交无效表单
- asp.net-mvc-3 – jQuery.validator.unobtrusive.adapters.
- asp.net-mvc-4 – MVC4 RC脚本捆绑很慢
- asp.net-mvc – FineUploader无法POST
- asp.net-mvc – 在typescript和knockout中使用vi
- asp.net单点登录不工作
- entity-framework – 具有列表的实体框架复杂对象
- asp.net-web-api – 在Web API 2中使用属性路由时
- asp.net-mvc – 禁止使用[授权]操作过滤器的控制
- ASP.NET Web Pages - WebMail 帮助器
- asp.net – 为什么ModalPopupExtender不通过java
- asp.net – GridView RowUpdating无法获取新值
- 在Docker上部署自动更新ssl证书的nginx + .NET C