Reputation: 29973
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):
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:
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
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/
Upvotes: 0
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:
Upvotes: 0
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
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