我们正在优化一个网站,并且已经读到了关于初始视图查找需要很长时间的问题。因此,随后的视图查找速度会快得多。Mini-profiler显示,很多时间都是在初始find视图中(我知道我可以使用~ path来减少这个时间),以及在这个阶段所做的任何其他事情。
缓存在哪里完成?视图、查找等缓存有多长时间?我可以查看缓存的内容吗?我们能做些什么让它预加载,这样就不会有延迟了吗?
我们有很多经常几个小时都没有访问的视图,我不希望性能突然出现高峰和低谷。
我们正在使用Azure,并且有许多web角色实例。我可以假设每个web角色都有自己的视图查找缓存吗?我们是否可以将缓存集中到每个应用程序中只发生一次?
另外,我读到MVC4在查找视图方面更快?有没有人有数据?
发布于 2012-08-02 22:53:33
默认缓存是15min,存储在HttpContext.Cache中,这都是由System.Web.Mvc.DefaultViewLocationCache类管理的。因为它使用标准的ASP.NET缓存,所以您可以使用一个自定义的缓存提供者,它从WAZ AppFabric缓存或新的缓存预览(在NuGet:http://nuget.org/packages/Glav.CacheAdapter上有一个)获取缓存。使用共享缓存将确保只有一个实例需要执行解析视图的工作。或者,您可以构建自己的缓存提供程序。
在发布模式下运行您的应用程序,清除不需要的视图引擎,编写确切的路径,而不是简单地调用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的代码是一样的。
发布于 2012-08-03 08:37:22
为了将缓存时间增加到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缓存。
https://stackoverflow.com/questions/11786808
复制相似问题