Deep Dive: Improving Performance in Your ASP.NET Appvideo.ch9.ms/sessions/build/2014/3-605.pptx ·...

42

Transcript of Deep Dive: Improving Performance in Your ASP.NET Appvideo.ch9.ms/sessions/build/2014/3-605.pptx ·...

Levi BroderickDeveloper, Microsoft Corp.

Deep Dive: Improving Performance in Your ASP.NET App

Session 3-605

Requests per second isn’t everything

Network

Disk

RAM

CPU

Storage quotas

Database

Maintenance

Development time

Applications consume resources

Network

Disk

RAM

CPU

Storage quotas

Database

Maintenance

Development time

Applications consume resources

$$$$$

$$$$$

$$$$$

$$$$$

$$$$$

$$$$$

$$$$$

$$$$$

I need to support _____ concurrent users. Could this or other numbers change in the future?

Responses should be served within _____ ms.

The site must be available _____ hours per day.

What are your goals?

A note about measuring performance

Output caching

Large responses (> 250 KB) Disabling the response buffer A Set-Cookie response header A no-cache, no-store, or Vary directive Requiring authentication to access the

resource

Gotchas that might disable the output cache

RAMMFAR

If enabled, ASP.NET intercepts all requests, even for static files Primarily used to allow Forms Authentication to secure access to static

files

Do you really need to enable it? If so, consider moving anonymously accessible static content to

another app pool Enable caching of static content in that app pool

RAMMFAR

Session state

Session state is enabled by default If two simultaneous requests come from the

same browser client, they’ll be processed serially

Remove empty Session_Start from Global.asax

Session state nits

Web forms (.aspx): Use the directive <%@ Page EnableSessionState="False" %>

MVC: Attribute your controller with [SessionState(SessionStateBehavior.Disabled)]

Disabling session state

App Suspensionrequires Windows Server 2012 R2

Allows the w3wp.exe process to be suspended rather than terminated when there are no requests

Site will be much more responsive to the next request

App suspension

App suspension

Source: .NET Framework Bloghttp://blogs.msdn.com/b/dotnet/

Runtime cachingHttpRuntime.Cache

A high-performance in-memory cache Can specify priorities, eviction conditions (SQL dependencies), and

more

Want to use it from outside ASP.NET? Consider ObjectCache in System.Runtime.Caching.dll

Want to use it in a web farm? You’ll need to enable affinitization

HttpRuntime.Cache

Long-running requests

Try to use WebSockets if possible Lower per-request memory overhead than standard requests

Or use a framework like SignalR Automatically negotiates the best transport mechanism

Long-running requests

async / await

ThreadPool threads are a resource If the ThreadPool is exhausted, new requests get added to a backlog

async / await allows you to utilize these resources more efficiently

See our aspConf talk for more info Link at the end of this presentation

async / await

__VIEWSTATE

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="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" />

Don’t be this guy

… hundreds of kilobytes later …

Use ViewStateMode for granular control Disabled by default for the page: <%@ Page ViewStateMode="Disabled" %> Enable per-control: <asp:Control runat="server" ViewStateMode="Enabled" />

Limit what you store in the Page.ViewState property Does this data really need to be in ViewState? Can it be inferred from

the URL? Can you store the primary key for the object instead of the object

itself?

Minimizing view state size

Do not set EnableViewStateMac=false Never, ever, under any circumstance Not even if you have set EnableViewState=false

We will forbid this setting in a coming update Your site may break once we push out this update if you have set this

switch

And another thing

Data access

Pay attention to number and size of queries Is your application making dozens of DB queries per request? Are these queries bringing down unnecessarily large amounts of data? Can caching help?

Prefer a modern data binding solution Consider EF code first and ASP.NET 4.5 model binding Prefer QueryableDataSource or ObjectDataSource over

SqlDataSource

Data access

Configuration

Max concurrent requests per application applicationHost.config: <serverRuntime appConcurrentRequestLimit="…" />

Max concurrent requests per CPU aspnet.config: <applicationPool maxConcurrentRequestsPerCPU="…" />

ASP.NET request queue limit machine.config: <processModel … />

Configuration

Miscellaneous

Is debug=true still present in web.config? Avoid one .aspx file per folder – try to

cluster Consider precompilation to reduce startup

time Avoid writes to files under c:\inetpub\wwwroot

Miscellaneous

Remove empty methods in Global.asax Use tracing, Glimpse, Intellitrace to find

bottlenecks Use performance counters for diagnostics Consider enabling CDNs on ScriptManager

Miscellaneous

Weigh 32-bit vs. 64-bit processes Don’t be afraid to scale out

Miscellaneous

Resources

EF 6.1.0 tools for Visual Studio 2012 & 2013 http://www.microsoft.com/en-us/download/details.aspx?id=40762

Fiddler web debugging proxy http://www.telerik.com/fiddler

Resources

WCAT extensions for Fiddler http://www.iis.net/downloads/community/2007/05/wcat-63-(x64) http://blogs.iis.net/thomad/archive/2010/05/11/using-the-wcat-fiddler-extension-for-web-server-performance-tests.aspx

“Async in ASP.NET” video (aspConf 2012) http://channel9.msdn.com/Events/aspConf/aspConf/Async-in-ASP-NET

Resources

Glimpse diagnostics package http://getglimpse.com/

Resources

[email protected]@LeviBroderick

http://www.asp.net/

Questions?Feedback?

Your Feedback is ImportantFill out an evaluation of this session and help shape future events. Scan the QR code to evaluate this session on your mobile device. You’ll also be entered into a daily prize drawing!

© 2014 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.