improving asp.net mvc application performance

34
www.mvcConf.com Improving ASP.NET MVC Application Performance Steve Smith The Code Project SteveSmithBlog.com | @ardalis

Upload: steven-smith

Post on 19-Jan-2015

18.183 views

Category:

Technology


1 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Improving ASP.NET MVC

Application Performance

Steve Smith

The Code Project

SteveSmithBlog.com | @ardalis

Page 2: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Defining Performance Metrics

• Page Execution Time

• Requests/Sec

• TTLB

Page 3: Improving ASP.NET MVC Application Performance

www.mvcConf.com

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)

Page 4: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Performance Requirement

• /Home/Index

• Must return within 1s Page Execution

Time

• Given 100 request/sec and base database

• With < 200 database requests/sec

Page 5: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Measure Baseline

• Record the Scenario

• Set up the Load Test

• Run the Test

• Analyze the Results

Page 6: Improving ASP.NET MVC Application Performance

www.mvcConf.com

DEMO

Baseline Measurement: MVC Music Store

Page 7: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Page 8: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Find the Slowest Pages

Page 9: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Tuning a Web Application

Define Goal

Measure System

Form Hypothesis;Alter System

StopMeets Goal

Does Not Meet Goal

Change Only One Thing!

Page 10: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Most Common Performance

Problems

• Database

– Too many queries

– Queries Not Optimized

• Network Requests

– From Server to Services

– From Browser to Web Server

Page 11: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Simple but Important

• Be sure production DLLs are compiled in Release mode!

• Isis.CodePlex.com (still alpha)

Page 12: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Caching

• Output Caching

– [OutputCache] attribute

– Applies to

• Action methods within Controller

• Or Entire Controller

Page 13: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Identify Pages To Cache

Page 14: Improving ASP.NET MVC Application Performance

www.mvcConf.com

DEMO

Applying Output Caching

Page 15: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Page 16: Improving ASP.NET MVC Application Performance

www.mvcConf.com

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

Page 17: Improving ASP.NET MVC Application Performance

www.mvcConf.com

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)

Page 18: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Other Tools: Profiling

Page 19: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Tier Interactions

Page 20: Improving ASP.NET MVC Application Performance

www.mvcConf.com

What about Async?

• Async Actions

• AsyncController

• Improves scalability

• May improve performance

Page 21: Improving ASP.NET MVC Application Performance

www.mvcConf.com

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

Page 22: Improving ASP.NET MVC Application Performance

www.mvcConf.com

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

Page 23: Improving ASP.NET MVC Application Performance

www.mvcConf.com

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

Page 24: Improving ASP.NET MVC Application Performance

www.mvcConf.com

MVC Performance Tips

Disable 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.

Page 25: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Remove Unused View Engines

Page 26: Improving ASP.NET MVC Application Performance

www.mvcConf.com

MVC Performance Tips

Avoid 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

Page 27: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Avoid Passing Null to View

Page 28: Improving ASP.NET MVC Application Performance

www.mvcConf.com

MVC Performance Tips

Uninstall IIS UrlRewrite Module

• If no applications on the server are using

it

• No effect in MVC apps before v3

• Enhances speed of URL generation

Page 29: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Uninstall UrlRewrite

(if not used)

Page 30: Improving ASP.NET MVC Application Performance

www.mvcConf.com

DEMO

Applying Performance Fixes

Page 31: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Summary of Perf Gains

0

50

100

150

200

250

300

Pages/Sec Page Time (ms)

Base

Release Mode

No Null ViewModel

1 ViewEngine

OutputCache

Page 32: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Summary

• Set Goals – Don’t Optimize Prematurely

• Measure and Tune Scientifically

• Look for big wins first

• Watch out for Gotchas and apply Tips

Page 33: Improving ASP.NET MVC Application Performance

www.mvcConf.com

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/

Page 34: Improving ASP.NET MVC Application Performance

www.mvcConf.com

Questions?

Tweet Your Questions to:

@ardalis How do I…? #mvcconf

Steve Smith

[email protected]

SteveSmithBlog.com

Twitter: @ardalis