我的MVC应用程序的输出缓存或httpcontext.current.cache

时间:2017-05-27 07:28:25

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

我们正在构建一个MVC应用程序,当用户第一次登录时,需要加载大量静态数据。

幸运的是,登录期间必须加载的大部分数据都是主数据,并且不会因任何用户而改变 但由于主数据的大小很大,我们认为最好实现缓存服务器端,因为浏览器可能无法保存数据

我已经阅读了Microsoft MVP在codeproject上发布的OutputCache帖子,他清楚地解释了缓存的作用以及使用缓存时需要注意的事项。 所以我通过添加行

实现了他在我的控制器中建议的所有内容
[OutputCache(Duration = 10, VaryByParam = "none", 
    Location=OutputCacheLocation, NoStore=true)]

在我的ActionMethod之上。

但我无法调试数据是从缓存加载还是发生了其他服务器命中。 所以我的第一个问题是如何调试输出缓存是否正常工作?

然后,在我们以前的MVC应用程序中,我们使用了httpcontext.current.cache,它工作得很好。 所以,这是我的第二个问题,这就是为什么我更喜欢OuputCache而不是httpcontext.current.cache,为什么不反之呢?

它们对缓存应用程序有何不同?

修改:1

这是我的登录视图控制器中的方法

public ActionResult GetRegions(string Ids)
{
 objRegionsResult = GetRegionsList();
 if (!string.IsNullOrEmpty(Ids))
 objRegionsResult = objRegionsResult.Where(x => Ids.Split(',').Contains(x.Type.ToString())).ToList();
 return Json(objRegionsResult, JsonRequestBehavior.AllowGet);
}



 private List<MORegionMaster> GetRegionsList()
    {
      RequestUri = "Home/GetRegions";
      HttpResponseMessage response = ConnectAPI(RequestUri);
      if (response.IsSuccessStatusCode)
      {
        objRegionsResult = response.Content.ReadAsAsync<List<MORegionMaster>>().Result;
      }
   }
    return objRegionsResult;
}

所以上面的方法就是我点击了api控制器,它会点击businesslogic类,然后点击数据库并返回数据表。

1 个答案:

答案 0 :(得分:0)

当我们想要缓存操作的结果时,我们使用OutputCache(不是静态文件,而是缓存业务逻辑结果)。当我们想要在特定时间内为所有用户提供数据时,我们会使用此功能。

当我们想要缓存一些可以在同一请求中多次使用的数据时,我们使用httpcontext.current.cache,比如缓存“当前登录的用户对象”,以避免多次db命中。

此外,输出缓存的生命周期不仅限于当前的http请求,但httpcontext.current.cache的生命周期仅限于当前的http请求。