Deep Dive: Improving Performance in Your ASP.NET Appvideo.ch9.ms/sessions/build/2014/3-605.pptx ·...
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
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?
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
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 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
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
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
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
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
<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
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
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
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
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
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.