2012-08-02 45 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緩存。