MVC View Lookup Caching.缓存多长时间了?它在哪里缓存?

Gra*_*ler 3 asp.net-mvc azure asp.net-mvc-3 mvc-mini-profiler

我们正在优化网站,并且已经阅读了很长时间内初始视图查找的问题.然后,对视图的后续查找要快得多.Mini-profiler显示很多时候都在初始查找视图中(我知道我可以使用~path来减少这个)以及在此阶段完成的任何其他工作.

缓存在哪里完成?视图查找等缓存了多长时间?我能看到缓存的内容吗?我们可以做任何事情来导致它预加载,所以没有延迟吗?

我们有很多观点,通常几个小时都没有访问过,我不希望突然出现高峰和低谷.

我们使用Azure并拥有许多Web角色实例.我可以假设每个Web角色都有自己的视图查找缓存吗?我们可以集中缓存,以便每个应用程序只发生一次吗?

另外我读MVC4更快找到视图?有人有任何数据吗?

San*_*tia 5

默认缓存为15分钟并存储在HttpContext.Cache中,这全部由System.Web.Mvc.DefaultViewLocationCache类管理.由于这使用标准的ASP.NET缓存,您可以使用自定义缓存提供程序从WAZ AppFabric Cache获取其缓存或新的缓存预览(NuGet上有一个:http://nuget.org/packages/Glav.CacheAdapter).使用共享缓存将确保只有1个实例需要执行解析视图的工作.或者您可以构建自己的缓存提供程序.

在发布模式下运行应用程序,清除不需要的视图引擎,编写确切的路径,而不是简单地调用View,...,这些都是加快视图查找过程的方法.在这里阅读更多相关信息:

您可以通过将每个视图的键添加到缓存来预加载视图位置.您应该将其格式设置如下(是当前的VirtualPathProviderViewEngine):

string.Format((IFormatProvider) CultureInfo.InvariantCulture, ":ViewCacheEntry:{0}:{1}:{2}:{3}:{4}:", (object) this.GetType().AssemblyQualifiedName, (object) prefix, (object) name, (object) controllerName, (object) areaName);
Run Code Online (Sandbox Code Playgroud)

如果MVC4更快,我没有任何数字,但看起来DefaultViewLocationCache代码与MVC3相同.