【发布时间】:2012-04-17 03:23:12
【问题描述】:
我有一个网站,我缓存了很多信息。我看到有关在 asp.net 缓存中存储内容的信息相互矛盾。
例如,假设我有这个数据结构:
Dictionary<string, List<Car>> mydictionary;
我可以使用字符串键将整个内容存储为“MyDictionary”,然后在我拉出对象后向下钻取。
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>>;
我可以做的另一件事是将它分解并将字典中的每个项目分别存储在缓存中(假设缓存无论如何都是字典)。
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>;
性能影响会非常不同(假设我假设一切都在内存中?)
【问题讨论】:
-
请记住,缓存是节省重新创建经常使用的
expensive对象成本的手段(即,重新创建的成本超过缓存的成本)。如果值得缓存,请允许缓存应用 LRU 规则以最大限度地提高性能。将所有条目放入单个缓存条目(“MyDictionary”)会破坏 LRU,并且如果缓存认为保留 MyDictionary 的效率低于保留其他条目的效率,则可能会丢失全部内容。
标签: asp.net asp.net-mvc caching httpcontext.cache