560 likes | 716 Views
DEV411 ASP.NET: Best Practices For Performance. Stephen Walther www.SuperexpertTraining.com. Purpose of Talk. What is the fastest method of displaying a set of database records in an ASP.NET Page?. Testing Tools. Trace Tools Profiler Tools Load Tools. Trace Tools.
E N D
DEV411 ASP.NET: Best Practices For Performance Stephen Walther www.SuperexpertTraining.com
Purpose of Talk What is the fastest method of displaying a set of database records in an ASP.NET Page?
Testing Tools • Trace Tools • Profiler Tools • Load Tools
Trace Tools • ASP.NET Page or Application Tracing Display trace information on page • System.Diagnostics Tracing Write trace information tocustom listener
Profiler Tools • CLR Profiler Free Profiler from Microsoft • ANTS Profiler Available at www.Red-Gate.com • SQL Profiler Included with Microsoft SQL Server
Load Tools • Application Center Test Included with Visual Studio .NET Enterprise • Web Application Stress Tool (WAST) Free download from Microsoft site • ANTS Load Available at www.Red-Gate.com. Includes calculated Frustration Coefficient
Test Setup • Application Center Test (ACT) • .NET Framework 1.1 • SQL Server 2000 • Windows Server 2003 (Standard)
Performance Statistics • Requests Per Second (RPS) • Time To Last Byte (TTLB) • Page Execution Time
Timer Module The Timer Module records the time interval between • PreRequestHandlerExecute Event • PostRequestHandlerExecute Event
Timer Module BeginRequest PreRequestEventHandlerExecute Application Events Init Load Page Events Unload PostRequestEventHandlerExecute EndRequest TimerModule.cs
Clock Resolution QueryPerformanceCounter is accurate to 1/3579545 of a second or about a millionth of a second
The Test • Request page 1050 times • Discard first 50 requests • Log time of each request • Average results
Database Setup Four Database Tables • Products10 – 10 Rows • Products50 – 50 Rows • Products100 – 100 Rows • Products500 – 500 Rows
What’s Faster? • DataReader • DataSet DisplayDataReader.aspx DisplayDataSet.aspx
DataReader Versus DataSetFinal Results On average, a DataReader is 16% faster than DataSet
3rd Option – ArrayList Using an ArrayList instead of a DataReader results in similar performance with the advantages of a static representation of data DisplayArrayList.aspx
What’s Faster? • SqlDataReader • OleDbDataReader
OleDbDataReaderFinal Results On average, a SqlDataReader is 115% faster than an OleDbDataReader
What’s Faster? • Inline SQL • Stored Procedure
What’s Faster? DataReader Column Reference • By Name: Response.Write(dr[“ProductName”]); • By Ordinal: Response.Write(dr[0]); • By GetString(): Response.Write(dr.GetString(0));
Column ReferenceFinal Results On average, ordinal reference is 11% faster than by name
What’s Faster? • Proper Case dr[“ProductName”] • Improper Case dr[“PRODUCTNAME”]
Proper CaseFinal Results Using proper column case is 1% faster than improper column case
What’s Faster? • Inline • ASP.NET Controls
DataGridFinal Results • Inline script is 233% faster than a DataGrid
What’s Faster? • DataGrid with ViewState Disabled • DataGrid with ViewState Enabled
ViewStateFinal Results DataGrid with ViewState disabled is 66% faster than DataGrid with ViewState enabled
What’s Faster? • AutoGenerateColumns • Template Columns
Template ColumnsFinal Results A DataGrid without templates is 39% faster than a DataGrid with templates
What’s Faster? How to improve template performance? • DataBinder.Eval <%# DataBinder.Eval(Container.DataItem, “ProductName”) %> • Explicit Cast <%# ((DbDataRecord)Container.DataItem)["ProductName"]%> • ItemDataBound void ItemDataBound(Object s, DataGridItemEventArgs e) DisplayItemDataBound.aspx
Template PerformanceFinal Results Explicit cast is 11% faster than using a databinding expression
Creating A Custom Control Would a custom DataGrid (with severely reduced functionality) be faster than the standard DataGrid? FastGrid.cs
Custom ControlFinal Results FastGrid is 37% faster than astandard DataGrid
What’s Faster? • DataGrid with no caching • DataGrid with data caching • DataGrid with output caching