Mark Friedman Architect Developer Division Microsoft Corporation 3 Dynamic <A HREF="resumepage.html">my resume</A> <LINK REL=STYLESHEET HREF="mystyles.css" TYPE="text/css"> 4 connectionless sessionless 5 Postback HttpContext ViewState Session State 6 7 On the client Performance counters Network Monitor traces ETW traces (IE, etc.) Direct measurements inside Javascript code On the server IIS logs (especially Time-Taken fields) Performance counters web app response time data is not available ETW traces (IIS, ASP.NET, CLR, etc.) volume considerations Direct measurement inside .NET code e.g., Stopwatch 8 End-to-End Multiple tiers 9 network latency Client-side script Client-side script Client-side script Network Latency Server-side .aspx Unit Test Network Latency Network Latency Server-side .aspx Load Test e.g., VS TeamTest Server-side .aspx Production 10 Page Load Time Ready 11 12 13 VRTA 15 16 Semi-dynamic 17 may be 18 effective Caching Architecture Guide for .NET Framework Applications 19 w3wp.exe Common Language Runtime (CLR) JIT compiler Garbage Collection threads MyApp.dll mscoree.dll mscorsvr.dll 20 runat=“server” Form: <asp:DropDownList id="FileDropDownList" style="Z-INDEX: 111; LEFT: 192px; POSITION: absolute; TOP: 240px“ runat="server" Width="552px" Height="40px“ AutoPostBack="True"></asp:DropDownList> Code behind: Private Sub FileDropDownList_SelectedIndexChanged _ (ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles FileDropDownList.SelectedIndexChanged Session("FileSelected") = FileDropDownList.SelectedValue End Sub 21 IIS Architecture Application Pool Application Pool IIS Administration net.tcp net.tcp http http Metabase Cache Windows Authentication WAS FTP SSL SMTP W3SVC NNTP LSSAS Inetinfo SVCHOST Default.aspx Default.aspx <code-behind>.dll <code-behind>.dll Mscoree.dll Mscoree.dll W3wp W3wp W3wp W3wp User Kernel HTTP HTTP Response Cache TCP IP Network Interface HTTP Request HTTP Kernel Mode Driver (http.sys) (Physical Memory) 22 http.sys Response object cache Web Service Cache\Kernel: Current URIs Cached, etc. See “IIS 7.0 Output Caching” at http://learn.iis.net/page.aspx/154/iis-7-output-caching/ 23 w3wp.exe 24 w3wp.exe From a command line: \windows\system32\inetsrv\appcmd list WP 25 27 28 Request Life-cycle Events Begin Request Authentication Authorization Resolve Cache Map Handler Acquire State Execute Handler Release State Update Cache Log Request Send Request 29 Event Event BeginRequest PreRequestHandlerExecute AuthenticateRequest PostRequestHandlerExecute PostAuthenticateRequest ReleaseRequestState AuthorizeRequest PostReleaseRequestState PostAuthorizeRequest PostMapRequestHandler ResolveRequestCache PostMapRequestHandler PostResolveRequestCache PostMapRequestHandler MapRequestHandler UpdateRequestCache PostMapRequestHandler PostUpdateRequestCache AcquireRequestState LogRequest PostAcquireRequestState EndRequest 30 <modules> 31 RequestNotification Mark Friedman Architect Developer Division 33 34 Level = 5 (Diagnostic level) 35 tracerpt tracerpt filename.etl –of CSV –o mytrace.csv logparser logparser "select * from filename.etl" -e 20 -o:DATAGRID -rtp 30 -compactModeSep "|" xperf 36 37 38 UseUrlFilter to control the volume of data Configure the TraceUriPrefix See “How to Trace Requests for a Specific URL or Set of URLs” at http://www.microsoft.com/technet/pro dtechnol/WindowsServer2003/Library/II S/c56d19af-b3d1-4be9-8a6f4aa86bacac3f.mspx?mfr=true 39 HttpContext Request Response Session Cache 40 HttpContext.Request HttpMethod (GET, POST, etc.) URL Cookies collection Headers InputStream UserHostAddress (IP address of the Requestor) etc. The ASP.NET programming model provides several facilities to persist User/Application state 41 Event Usage PreInit Create dynamic controls, set the Theme; master page, etc. Init Read or initialize control properties InitComplete Raised by the Page object. PreLoad Perform any processing on your page or control before the Load event. Load The Page calls the OnLoad event method on the Page, then recursively for each child control and its children Control events Button Clicks and other Control events are processed after Page_Load LoadComplete Fires after all controls on the page are loaded. PreRender Data binding for controls occurs now. SaveStateComplete Fires when the ViewState for all controls is complete and saved. Render Method that writes out the html markup associated with the control. Unload Do final cleanup, such as closing files or database connections 42 Session State Cache e.g., Presentation Layer Business Logic Layer Data Layer 43 44 HttpApplicationState 45 Application Page HttpApplicationState Page.Cache Session 46 State Management ViewState Stored in _VIEWSTATE hidden field ControlState Override if ViewState is turned off on the Page HiddenField control Cookies Add cookie data to the Cookies collection in the HttpResponse object Query strings Application State HttpApplicationState Session State Profiles SqlProfileProvider 47 ViewState 48 ViewState Passed to the client in _ViewState hidden field in the Response message Returned to the Server on a postback Request Inspect using View html Source on the client 3rd party tools like Fiddler Be careful of Data bound controls (GridView, etc.) Large TreeViews, DropDownLists, etc. 50 51 Page.Application Application.Lock(); Application["PageRequestCount"] = ((int)Application["PageRequestCount"])+1; Application.UnLock(); 52 ASP.NET Session state HttpContext.Session Data associated with a logical sequence of Requests that need to be persisted across interactions Unique session IDs are passed along automatically with each Request as either cookies or embedded in the URL Session data is stored in a Dictionary collection, allowing individual session state variables to be accessed directly by Key name Three external storage options InProc StateServer SQL Server Timeout management 53 HttpContext.Session InProc option provides fastest service, but does not permit access to Session data from a different process in a Web garden application or a different Web server in a cluster Using alternatives to InProc session storage has significant performance implications StateServer SQL Server Custom provider Measure impact using the IIS RequestNotification events e.g., AcquireRequestState, PostAcquireRequestState 54 Session State options InProc StateServer SQLServer 55 56 Session State options InstallSqlState.sql InstallPersistSqlState.sql sessionState 57 Frequency of re-use Cost to re-generate Size Max(Cache Hit %) Min(Space x Time) 58 Cache Size diminishing returns 0 25 50 75 100 Cache Hit % 59 IIS kernel mode Cache ASP.NET Application cache ASP.NET Page cache 60 Note: effective difficult complex 61 HttpContext.Cache Page.Cache @ OutputCache VaryByParam <PartialCaching> Substitution.MethodName HttpResponse.WriteSubstitution 62 frequency of use x object size Underused 63 64 Cache Dictionary IEnumerable 65 Add Insert Get Remove 66 AggregateCacheDependency SqlCacheDependency http://msdn.microsoft.com/enus/library/system.web.caching.sqlcachedependency.a spx 67 effectiveness Cache API Entries Cache API Hits Cache API Misses Cache API Hit Ratio Cache API Turnover Rate 68 public void RemovedCallback (String k, Object v, CacheItemRemovedReason r){ } Examine the CacheItemRemovedReason 69 InstrumentedCacheValue // unfortunately, it is a sealed class; otherwise… // private Int64 _refcount; // private DateTime _lastreftimestamp; 70 Count EffectivePrivateBytesLimit EffectivePercentagePhysicalMemoryLimit disableMemoryCollection disableExpiration privateBytesLimit percentagePhysicalMemoryUsedLimit privateBytesPollTime="HH:MM:SS" 71 @ OutputCache Duration VaryByParam Location 72 HttpCachePolicy 73 Response.Cache.SetCacheability HttpCacheability 74 effectiveness Cache Entries Cache Hits Cache Misses Cache Hit Ratio Cache Turnover Rate 75 When page caching will not work due to dynamic content [PartialCaching(120)] public partial class CachedControl : System.Web.UI.UserControl // Class Code Banner ads, etc. 76 not change that did AJAX requests Javascript asynchronous HTTP 77 ICallbackHandler <asp:ScriptManager EnablePartialRendering="True“ /> 78 XMLHttpRequest xmlhttp.open('GET', url, true); xmlhttp.onreadystatechange = AsyncUpdateEvent; xmlhttp.send(null); 79 UpdatePanel “ Triggers ChildrenAsTriggers AJAX Application Architecture, Part 1 80 Sys.Application.Init Sys.Application.Load UpdatePanel 81 PageRequestManager pageLoading pageLoaded endReques 82 ICallbackEventHandler RaiseCallbackEvent GetCallbackResul Implementing Client Callbacks Programmatically Without Postbacks in ASP.NET Web Pages 83 REST AJAX library wraps asynchronous WCF service endpoints Try the new Asynchronous WCF HTTP Module/Handler for long running Requests New in VS 2008 SP1 Releases the IIS worker thread immediately after processing http://msdn.microsoft.com/en-us/library/cc907912.aspx See Wenlong Dong’s blog for details 84 WebHttpBinding 85 Caution: your mileage will vary. Binding Binding Response Time (msecs) Throughput wsHttpBinding 1300 1200 basicHttpBinding 1150 1800 netTcpBinding 400 5100 netNamedPipeBinding 280 7000 Throughput 8000 Source: Resnik, Crane, & Bowen, Essential Windows Communication Foundation, Addison Wesley, 2008. Chapter 4. 6000 4000 2000 0 See also, “A Performance Comparison of Windows Communication Foundation (WCF) with Existing Distributed Communication Technologies” 86 [ServiceContract(Session = true)] interface IMyContract {...} [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] class MyService : IMyContract {...} <netTcpBinding> <binding name="TCPSession"> <reliableSession enabled="true" inactivityTimeout="00:25:00"/> </binding> </netTcpBinding> they are received conversation in the order in which [ServiceBehavior( InstanceContextMode=InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple )] class MySingleton : IMyContract, IDisposable ConcurrencyMode.Multiple requires locking and synchronization of shared state data ConcurrencyMode.Reentrant serviceThrottling <behavior name="Throttled"> <serviceThrottling maxConcurrentCalls="100" maxConcurrentSessions=“30" maxConcurrentInstances=“20" /> performanceCounters Mark Friedman Architect Developer Division <system.serviceModel> <diagnostics performanceCounters="All"></diagnostics> But <diagnostics performanceCounters=“ServiceOnly"></diagnostics> is recommended (less overhead) 92 93 “Using Service Trace Viewer for Viewing Correlated Traces and Troubleshooting” Essential Windows Communication Foundation 94 95 96 string using new "http://localhost:8000/HelloService" "http://localhost:8000/HelloService/MyService" new new "Press <enter> to terminate service" 97 Measure: 98 Fiddler 99 TCP Window Size without 100 Best Practices for Improving Page Load Time 102 103 104 105 (serialized) 106 107 108 109 Request Get 110