2012-08-02 46 views
2

我们正在优化一个网站,并阅读了很长时间的初始视图查找问题。随后查看视图的速度会更快。 Mini-profiler显示很多时间都在最初的查找视图中(我知道我可以使用〜路径来减少这一点)以及在此阶段完成的任何其他操作。MVC查看查找缓存。缓存多久?它在哪里缓存?

高速缓存在哪里完成?视图查找等缓存了多久?我可以看到缓存的内容吗?我们可以做任何事情使它预加载,所以不会有任何延迟吗?

我们有许多意见,经常不会访问几个小时,我不希望突然的高峰和低谷的表现。

我们正在使用Azure并拥有多个Web角色实例。我可以假设每个Web角色都有自己的视图查找缓存吗?我们是否可以集中缓存,使其仅在每个应用程序中出现一次?

另外我读MVC4更快找到意见?有没有人有任何数字?

回答

4

默认缓存为15min并存储在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); 

我没有任何数字,如果MVC4比较快,但是它看起来像DefaultViewLocationCache代码是相同MVC3。

+0

非常感谢。将在新的共享Azure缓存中查看更长时间的缓存和缓存。 – GraemeMiller 2012-08-02 22:59:11

2

为了提高我的cachetime至24小时,我用在Global.asax

var viewEngine = new RazorViewEngine 
         {ViewLocationCache = new DefaultViewLocationCache(TimeSpan.FromHours(24))}; 
    //Only allow Razor view to improve for performance 
    ViewEngines.Engines.Clear(); 
    ViewEngines.Engines.Add(viewEngine); 

下面也是本文ASP.NET MVC Performance Issues with Render Partial也非常有趣。

将着眼于编写我自己的ViewLocationCache以利用共享的Azure缓存。