Jez
Jez

Reputation: 29973

ASP.NET MVC rendering seems slow

I've created a brand new MVC4 web application in Visual Studio, and done nothing more with it than add a Home controller and a "Hello world" index view for it. I then installed the MiniProfiler NuGet package and put the necessary couple of lines in _Layout.cshtml. This is what I get when I run the site in Release mode (hosted in IIS):

MVC rendering picture

The rendering time varies by pageload, but 130ms is about as fast as it gets. This seems a bit slow to me, as I've seen other people who get pages rendered in 30ms or quicker. Any ideas why the rendering would be this slow with a brand new empty MVC4 project? My processor is an Intel Core i5-2400 and the machine has 16GB RAM.

By the way, this is not the first time the page is loaded; I reloaded the page a few times before getting this 130ms result.

UPDATE:
I followed the advice in the answer from PSCoder (remove all but the RazorViewEngine), and it halved the rendering time:

MVC rendering picture 2

This is really good, but I still get about 70ms or higher for the main Render action of the page; ideally I'd like to halve that or better.

Specifically, I'd like to ask:

Upvotes: 49

Views: 49344

Answers (4)

Kavi
Kavi

Reputation: 191

Pre-compile the views to speed up the first-time rendering..

Check the below blog..

https://blog.deltacode.be/2017/01/08/fix-slow-startup-of-asp-net-mvc-5-on-azure-app-services/

enter image description here

Upvotes: 0

user1023602
user1023602

Reputation:

Views are compiled before use - so on the first occasion they are slow.

Subsequently they are recompiled if the .cshtml file changes - which means the directories that views are stored in are being monitored. So hard disk speed will be a factor for MVC views.

Even if they do nothing, each rendering engine checks the hard disk for .cshtml or .aspx files. Since removing a rendering engine made it run twice as fast, I suspect disk speed is the problem:

  • Views are stored on a network drive, or
  • Hard disk is very slow

Upvotes: 0

Stuart.Sklinar
Stuart.Sklinar

Reputation: 3761

Adding to @PSL 's answer - we only ever check for `.CSHTML files

ViewEngines.Engines.Clear();

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

ViewEngines.Engines.Add(razorEngine);

Also, make sure you are running in Release Mode - that is absolutely critical, as ASP/Razor/MVC 'applies some pretty aggressive caching' when in release mode

<compilation targetFramework="4.0" debug="false"> in your Web.Config file.

Sam Saffron/Stack Overflow looked into view rendering performance also:

http://samsaffron.com/archive/2011/08/16/Oh+view+where+are+thou+finding+views+in+ASPNET+MVC3+

Upvotes: 59

PSL
PSL

Reputation: 123739

This could help improve ASP.NET MVC related performance issue , one performance improvement that you can do is to clear all the view engines and add the one(s) that you use. say for ex:- RazorViewEngine. MVC registers 2 view engines by default Webforms and Razor view engines, so clearing and adding the ones that is used alone will improve the look up performance.

You can add this in global.asax Application_Start.

        ViewEngines.Engines.Clear();    
        ViewEngines.Engines.Add(new RazorViewEngine());      

In order to completely utilize view look up caching and thus again performance gain compile the code in release mode and make sure that your web.config file is configured with <compilation debug="false" /> for view look up caching to kick in.

Upvotes: 80

Related Questions