Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Improving ASP.NET MVC Application Performance

25,765 views

Published on

You've built an ASP.NET MVC application, but now you want it to go faster and serve more concurrent user requests. In this session, we'll look at some of the common performance problems ASP.NET MVC applications may encounter, and how to diagnose and correct them, using Visual Studio 2010's testing tools.

Presented 8 Feb 2010 at MVCConf.com.

Published in: Technology
  • Njce! Thanks for sharing.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you are looking to do some additional performance tuning, there are a lot of different tools to help you find and optimize ASP.NET performance. I made a great list of 9 different types of tools. Check it out and see if any of these can help: ASP.NET Performance: 9 Types of Tools You Need to Know!
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hi Steven

    Great presentation, thanks

    We've also had issues with slow performance with some MVC apps, so I put together a complete list with code examples.

    Please take a look and let me know what you think:

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

    Robert
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Well presented! Here I’d add one more point that app performance can be enhanced by caching. Caching is incredible tool for performance enhancement and if scalability is also a concern then distributed caching is perfect technique. Any third party Distributed Cache (Like NCache) can be used.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Improving ASP.NET MVC Application Performance

  1. 1. Improving ASP.NET MVC Application Performance Steve Smith The Code Project SteveSmithBlog.com | @ardaliswww.mvcConf.com
  2. 2. Defining Performance Metrics• Page Execution Time• Requests/Sec• TTLB www.mvcConf.com
  3. 3. Defining Performance Requirements• A given web request (/Home/Index)• Must return within a given time (TTLB or Page Execution Time)• Under a given load (Requests/Sec + Active Users)• Given system characteristics (50k records)• Resource constraints (< 400 database server requests/sec) www.mvcConf.com
  4. 4. Performance Requirement• /Home/Index• Must return within 1s Page Execution Time• Given 100 request/sec and base database• With < 200 database requests/sec www.mvcConf.com
  5. 5. Measure Baseline• Record the Scenario• Set up the Load Test• Run the Test• Analyze the Results www.mvcConf.com
  6. 6. Baseline Measurement: MVC Music StoreDEMOwww.mvcConf.com
  7. 7. www.mvcConf.com
  8. 8. Find the Slowest Pageswww.mvcConf.com
  9. 9. Tuning a Web Application Define Goal Meets Goal Measure System Stop Does Not Meet Goal Form Hypothesis; Change Only One Thing! Alter Systemwww.mvcConf.com
  10. 10. Most Common Performance Problems• Database – Too many queries – Queries Not Optimized• Network Requests – From Server to Services – From Browser to Web Server www.mvcConf.com
  11. 11. Simple but Important• Be sure production DLLs are compiled in Release mode!• Isis.CodePlex.com (still alpha) www.mvcConf.com
  12. 12. Caching• Output Caching – [OutputCache] attribute – Applies to • Action methods within Controller • Or Entire Controller www.mvcConf.com
  13. 13. Identify Pages To Cachewww.mvcConf.com
  14. 14. Applying Output CachingDEMOwww.mvcConf.com
  15. 15. www.mvcConf.com
  16. 16. Add Data Caching• Apply to Read operations• Use where Output Caching can’t be used• Consider applying at Repository level• Consider using Sql Cache Invalidation or short cache duration www.mvcConf.com
  17. 17. What About Writes?• Avoid blocking on writes – Send messages – Use Async calls on server – Use Async/Ajax calls from client• Logically partition reads and writes – Command Query Responsibility Separation (CQRS) www.mvcConf.com
  18. 18. Other Tools: Profilingwww.mvcConf.com
  19. 19. Tier Interactionswww.mvcConf.com
  20. 20. What about Async?• Async Actions• AsyncController• Improves scalability• May improve performance www.mvcConf.com
  21. 21. Comparing MVC and View Engines• MVC 2 Template on MVC 2 – 8135 Requests/sec• MVC 2 Template on MVC 3 – 7987 Requests/sec• MVC 3 Webforms View Engine on MVC 3 – 7457 Requests/sec• MVC 3 Razor View Engine on MVC 3 – 7136 Requests/sec http://blogs.msdn.com/b/marcinon/archive/2011/01/17/mvc-3-performance.aspx www.mvcConf.com
  22. 22. MVC 3 Performance• Unobtrusive client-side validation on by default• Razor view engine imposes small cost over webforms view engine• Performance improved for: – Expression caching (lambdas) – URL generation – Action lookup – Filter invocation www.mvcConf.com
  23. 23. MVC Gotchas• Avoid HttpResponse.WriteSubstitution() – Contents may be incorrectly cached – http://haacked.com/archive/2008/11/05/donut-caching-in-asp.net-mvc.aspx – May work with MVC3 + ASPX; not supported; definitely not w/Razor• RenderAction() Cache Bug – Calling an action with OutputCache attribute may result in entire page being cached – http://haacked.com/archive/2009/05/12/donut-hole-caching.aspx www.mvcConf.com
  24. 24. MVC Performance TipsDisable Unused View Engines• Html.EditorFor, Html.DisplayFor always look for templates for each view engine• Save extra “misses” to disk by removing unused view engines. www.mvcConf.com
  25. 25. Remove Unused View Engineswww.mvcConf.com
  26. 26. MVC Performance TipsAvoid Passing Null to Strongly Typed Views w/Helpers• Helpers like Html.TextBoxFor(m => m.Name) will throw NullReferenceException• Exceptions will be caught/ignored, but may add up to negative performance impact www.mvcConf.com
  27. 27. Avoid Passing Null to Viewwww.mvcConf.com
  28. 28. MVC Performance TipsUninstall IIS UrlRewrite Module• If no applications on the server are using it• No effect in MVC apps before v3• Enhances speed of URL generation www.mvcConf.com
  29. 29. Uninstall UrlRewrite (if not used)www.mvcConf.com
  30. 30. Applying Performance FixesDEMOwww.mvcConf.com
  31. 31. Summary of Perf Gains300250200 Base Release Mode150 No Null ViewModel100 1 ViewEngine 50 OutputCache 0 Pages/Sec Page Time (ms) www.mvcConf.com
  32. 32. Summary• Set Goals – Don’t Optimize Prematurely• Measure and Tune Scientifically• Look for big wins first• Watch out for Gotchas and apply Tips www.mvcConf.com
  33. 33. References• http://blogs.msdn.com/b/marcinon/archive/2011/01/17/mvc-3-performance.aspx• http://blogs.msdn.com/b/marcinon/archive/2011/02/07/mvc-performance-tips.aspx• http://www.asp.net/mvc/tutorials/improving-performance-with-output-caching-cs• http://www.asp.net/mvc/tutorials/adding-dynamic-content-to-a-cached-page-cs• http://mvcmusicstore.codeplex.com/• http://isis.codeplex.com/ www.mvcConf.com
  34. 34. Questions?Tweet Your Questions to:@ardalis How do I…? #mvcconfSteve Smithssmith@lakequincy.comSteveSmithBlog.comTwitter: @ardalis www.mvcConf.com

×