Question

Is there anyway to run through the application and pre-populate the MVC ViewCache to eliminate the 2sec time loss that can sometimes occur during the warm-up of a web app?

At current whilst our application is starting, we sometimes are greeted with 2sec performance lag times.. once it's started there are mere-milliseconds.

In case it helps, I am definitely running in release mode, and only use the Razor engine:

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        Bootstrapper.Initialise(); //IOC Setup
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        //Only use the RazorEngine. - http://blogs.msdn.com/b/marcinon/archive/2011/08/16/optimizing-mvc-view-lookup-performance.aspx
        ViewEngines.Engines.Clear();

        IViewEngine razorEngine = new RazorViewEngine() { FileExtensions = new string[] { "cshtml" } };

        ViewEngines.Engines.Add(razorEngine);
    }

Any suggestions welcome.

Ta

Was it helpful?

Solution

You could use the new ASP.NET AutoStart feature in IIS 7.5. Also make sure that when you deploy your application it is running in Release mode (debug="false").

OTHER TIPS

Dave Ward discusses this and other issues related to debug="false" in your web.config in A harsh reminder about the importance of debug=”false”.

In debug mode, view resolution is optimized for ease of development. MVC iterates through the view resolution process each and every time your code renders a named view. That’s helpful since you obviously do want the environment to respond immediately to your changes when you’re working on a site.

In release mode, however, MVC’s view resolution is optimized for performance. When a view location is successfully resolved in release mode, MVC caches the result of that lookup and doesn’t need to perform another filesystem search when it encounters a reference to that named view again.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top