Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC应用程序的输出缓存或httpcontext.current.cache_C#_Asp.net Mvc_Asp.net Mvc 4_Caching - Fatal编程技术网

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

C# MVC应用程序的输出缓存或httpcontext.current.cache,c#,asp.net-mvc,asp.net-mvc-4,caching,C#,Asp.net Mvc,Asp.net Mvc 4,Caching,我们正在构建一个MVC应用程序,当用户第一次登录时,将加载大量静态数据 幸运的是,在登录期间必须加载的大多数数据都是主数据,对于任何用户都不会更改 但由于主数据的大小非常大,我们认为最好在服务器端实现缓存,因为浏览器可能无法保存数据 我读过一位微软MVP在OutputCache上发表的codeproject文章,他清楚地解释了缓存的作用以及使用缓存时需要记住的事项。 所以我实现了他在我的控制器中提出的所有建议,只需添加行 [OutputCache(Duration = 10, VaryByPar

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

幸运的是,在登录期间必须加载的大多数数据都是主数据,对于任何用户都不会更改 但由于主数据的大小非常大,我们认为最好在服务器端实现缓存,因为浏览器可能无法保存数据

我读过一位微软MVP在
OutputCache
上发表的
codeproject
文章,他清楚地解释了缓存的作用以及使用缓存时需要记住的事项。 所以我实现了他在我的控制器中提出的所有建议,只需添加行

[OutputCache(Duration = 10, VaryByParam = "none", 
    Location=OutputCacheLocation, NoStore=true)]
在我的行动方法之上

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

然后,在我们以前的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;
}
public ActionResult GetRegions(字符串ID)
{
objRegionResult=getRegionList();
如果(!string.IsNullOrEmpty(Ids))
objRegionsResult=objRegionsResult.Where(x=>Ids.Split(',')。包含(x.Type.ToString()).ToList();
返回Json(objRegionResult,JsonRequestBehavior.AllowGet);
}
私有列表getRegionList()
{
RequestUri=“Home/GetRegions”;
httpresponsemessageresponse=ConnectAPI(RequestUri);
if(响应。IsSuccessStatusCode)
{
objRegionsResult=response.Content.ReadAsAsync().Result;
}
}
返回objRegionsResult;
}

因此,上面的方法就是我点击api控制器的地方,它会点击businesslogic类,然后点击数据库并返回datatable。

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

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


此外,输出缓存的生存期不仅限于当前http请求,而且httpcontext.current.Cache的生存期仅限于当前http请求。

否,可能您误解了我的要求。我的要求不是缓存js、css文件,我需要缓存每次用户登录时通过API调用获取的主数据。但是,对于所有不同的用户,主数据保持不变,因此我需要在服务器中缓存数据。是否只缓存业务逻辑?您是从api调用获取主数据,还是在请求中的某个位置使用主数据?为了更清楚,我在问题中添加了代码,请浏览编辑:1部分,您可以使用OutputCache和VaryByParam true来执行GetRegions操作,并使用System.Runtime.Caching.MemoryCache缓存GetRegionList()结果。我指的是MemoryCache,因为它的生存期不限于当前http请求,而httpcontext.current.cache的生存期仅限于当前请求。