在MVC中缓存列表集合

时间:2013-09-04 23:27:30

标签: c# asp.net-mvc caching razor

我正在开发一个搜索页面,其中包含多个具有不同数据库值的下拉列表。我开始研究缓存技术并遇到了一些可能的解决方案

  1. OutputCaching
  2. HttpContext.Cache
  3. 当我更多地了解不同类型的缓存时,我记得此应用程序还提供了度量页面,可以使用搜索页面中的相同下拉菜单。现在,我想要一个站点范围的解决方案,而不是搜索页面解决方案。

    我在两种情况下检索不同值的方式几乎相同。我有一个带有各种“可用”字段的ViewModel。这些字段填充在构造函数中。

    public class SearchViewModel
    {
        public AvailableSites {set;get;}
    
        public SearchViewModel()
        {
            AvailableSites = db.SomeTable.Select(s => s.Site).Distinct();
        }
    }
    

    当我的模型以这种方式设置时,每次用户点击搜索或指标页面时,应用程序必须点击数据库以填充下拉菜单。缓存将大大减少它对数据库和网络的负载。

    似乎OutputCache仅适用于控制器操作,因此这似乎是不可能的。

    不同查询的结果很少会发生变化。这是我想用HttpContext缓存的东西吗?在这种情况下,哪种类型的缓存最有效?

    此外,将此集成到我的MetricBase(每个指标VM是否继承自此)和SearchViewModel的最佳方法是什么?对于这种情况,继承似乎有些过分。我是否只需将此类列为private AvailableValue Values {set;get;}并通过Values.AvailableSites访问它们?

1 个答案:

答案 0 :(得分:2)

System.Runtime.Caching.MemoryCache提供强大的内存缓存(请参阅http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache(v=vs.100).aspx)。

据我所知,它基于System.Web.Caching,但不依赖于System.Web程序集,因此您可以将它放在业务层中。

此博客文章可以帮助您实施:http://deanhume.com/Home/BlogPost/object-caching----net-4/37