Tips and Tricks on how to improve MVC Application Performance

Thanks Robert.


http://www.robertsindall.co.uk/blog/how-to-improve-mvc-application-performance/


In this post we will cover a few tips and tricks to improve ASP.NET MVC Application Performance.

Run in Release mode

Make sure your production application always runs in release mode in the web.config
?
1
<compilation debug="false"></compilation>
or change this in the machine.config on the production servers
?
1
2
3
4
5
<configuration>
    <system.web>
          <deployment retail="true"></deployment>
    </system.web>
</configuration>

Only use the View Engines that you require

?
1
2
3
4
5
protected void Application_Start()
{
    ViewEngines.Engines.Clear();
    ViewEngines.Engines.Add(new RazorViewEngine());
}

Use the CachedDataAnnotationsModelMetadataProvider

?
1
ModelMetadataProviders.Current = new CachedDataAnnotationsModelMetadataProvider();

Avoid passing null models to views

Because a NullReferenceException will be thrown when the expression gets evaluated, which .NET then has to handle gracefully.
?
1
2
3
4
5
// BAD
public ActionResult Profile()
{
    return View();
}
?
1
2
3
4
5
// GOOD
public ActionResult Profile()
{
    return View(new Profile());
}

Use OutputCacheAttribute when appropriate

For content that does not change often, use the OutputCacheAttribute to save unnecessary and action executions.
?
1
2
3
4
5
[OutputCache(VaryByParam = "none", Duration = 3600)]
public ActionResult Categories()
{
    return View(new Categories());
}

Use HTTP Compression

?
1
2
3
<system.webserver>
<urlcompression dynamiccompressionbeforecache="true" dostaticcompression="true" dodynamiccompression="true"></urlcompression>
</system.webserver>

Remove unused HTTP Modules

If you run into any problems after removing them, try adding them back in.
?
1
2
3
4
5
6
<httpmodules>
      <remove name="WindowsAuthentication"></remove>
      <remove name="PassportAuthentication"></remove>
      <remove name="Profile"></remove>
      <remove name="AnonymousIdentification"></remove>
</httpmodules>

Flush your HTML as soon as it is generated

?
1
<pages enableviewstate="false" buffer="true"></pages>

Turn off Tracing

?
1
2
3
4
5
<configuration>
     <system.web>
          <trace enabled="false"></trace>
     </system.web>
</configuration>

Remove HTTP Headers

This is more of a security thing
?
1
2
3
<system.web>
    <httpruntime enableversionheader="false"></httpruntime>
</system.web>
?
1
2
3
4
5
<httpprotocol>
 <customheaders>
  <remove name="X-Powered-By"></remove>
 </customheaders>
</httpprotocol>

Uninstall the URL Rewrite module if not required

This saves CPU cycles used to check the server variable for each request.
?
1
Go to "Add or Remove Programs" and find "Microsoft URL Rewrite Module" and select uninstall.

Don’t write rubbish code

Comments