Advanced Performance Advanced Performance Techniques in ASP.NET 2.0Techniques in ASP.NET 2.0
William Zhang, Ph.D.Senior Consultant
Microsoft Consulting Services
William Zhang, Ph.D.William Zhang, Ph.D.Senior ConsultantSenior Consultant
Microsoft Consulting ServicesMicrosoft Consulting Services
AgendaAgenda
SQL Server cache dependency SQL Server cache dependency ((SqlCacheDependencySqlCacheDependency))
Custom cache dependency Custom cache dependency ((CacheDependencyCacheDependency))
PostPost--cache substitution cache substitution
Asynchronous page with parallelAsynchronous page with parallel--processed tasks processed tasks
Data paging via stored procedure Data paging via stored procedure
Returning multiple result sets from DBReturning multiple result sets from DB
Script callback (out of band call) Script callback (out of band call)
SqlCacheDependencySqlCacheDependencySystem.Web.CachingSystem.Web.Caching
SQL 7 & 2000 SupportSQL 7 & 2000 Support
Table change dependencies on SQL 7 & 2000Table change dependencies on SQL 7 & 2000
Requires Requires <cache><cache> configuration settingsconfiguration settings
OneOne--time setup of SQL Server databasetime setup of SQL Server database
Polling modelPolling model
SQL Server SQL Server ““YukonYukon””
Result Set dependencies for SQL YukonResult Set dependencies for SQL Yukon
Supported through ADO.NET Supported through ADO.NET SqlCommandSqlCommand
No setup requiredNo setup required
Notification modelNotification model
SQL Server 7 & 2000SQL Server 7 & 2000
Table level notifications onlyTable level notifications onlyNotification when data in table changesNotification when data in table changes
RowRow--level notification level notification is notis not supportedsupported
Requires one time setup of SQL 7 / Requires one time setup of SQL 7 / 20002000
Triggers on tables that participateTriggers on tables that participate
Stored procedures called to checkStored procedures called to check
Of Note:Of Note:Entries in cache table < # of tables in Entries in cache table < # of tables in DBDB
Entries in cache = # items in cache tableEntries in cache = # items in cache table
aspnet_regsqlcache.exeaspnet_regsqlcache.exe
Enable databaseEnable databaseaspnet_regsqlcache.exeaspnet_regsqlcache.exe --S . S . --E E --d d NorthwindNorthwind ––eded
Enable tableEnable tableaspnet_regsqlcache.exeaspnet_regsqlcache.exe --S . S . --E E --t Products t Products --d d NorthwindNorthwind ––etet
List enabled tablesList enabled tablesaspnet_regsqlcache.exeaspnet_regsqlcache.exe --S . S . --E E --d d NorthwindNorthwind --ltlt
How it works: SQL How it works: SQL ‘‘YukonYukon’’
ASP.NETASP.NET SQL Server SQL Server ‘‘YukonYukon’’
IISIIS
Northwind
HttpListenerHttpListener
Http.sysHttp.sys Notification Delivery ServiceNotification Delivery ServiceTCP Port 80
SqlCommandSqlCommandSqlCommand
SqlCacheDependencySqlCacheDependency
PagePage
DataSetDataSet
CacheCache Change Change DetectionDetection
SQL Server Cache Dependency (SQL Server 2000)
Source: SqlCacheDependencyTest.aspx for SQL Server 2000
CacheDependencyCacheDependency ChangesChangesSystem.Web.CachingSystem.Web.Caching
No breaking changes to No breaking changes to CacheDependencyCacheDependency
Backwards compatible with v1.X codeBackwards compatible with v1.X code
ASP.NET 2.0 ASP.NET 2.0 CacheDependencyCacheDependency class:class:
New virtual properties/methodsNew virtual properties/methods
Public default constructorPublic default constructor
Class can be derived, i.e. unsealedClass can be derived, i.e. unsealed
Custom Cache DependenciesCustom Cache Dependencies
Anyone can create a dependencyAnyone can create a dependency
WebServiceDependencyWebServiceDependency
OracleCacheDependencyOracleCacheDependency
This is just what we did forThis is just what we did for
SqlCacheDependencySqlCacheDependency
AggregateDependencyAggregateDependency
ASP.NET 2.0ASP.NET 2.0
PostPost--Cache SubstitutionCache Substitution
Output cache entire pageOutput cache entire page
Identify regions that are dynamicIdentify regions that are dynamic
Uses a Uses a PlaceHolderPlaceHolder bufferbuffer
PostPost--Cache SubstitutionCache Substitution
New New Response.WriteSubstitutionResponse.WriteSubstitution()()
WiresWires--up substitution event on page up substitution event on page
Adds a substitution buffer to the Adds a substitution buffer to the responseresponse
Substitution event returns string value Substitution event returns string value to addto add
New New <<asp:substitutionasp:substitution />/> controlcontrol
DragDrag--drop where content should godrop where content should go
Set the Set the MethodNameMethodName propertyproperty
<<asp:AdRotatorasp:AdRotator>> builtbuilt--in supportin support
Asynchronous ASPX PageAsynchronous ASPX PageBy default, page processing in By default, page processing in ASP.NET is synchronous ASP.NET is synchronous
Assigned thread does nothing else Assigned thread does nothing else until the request completesuntil the request completes
ASP.NET has a limited number of ASP.NET has a limited number of threads at its disposal to process threads at its disposal to process requests requests
Requests are rejected with 503 Requests are rejected with 503 "Server Unavailable" errors when "Server Unavailable" errors when queue is filled up to its capacity queue is filled up to its capacity (100)(100)
Asynchronous ASPX page is for thisAsynchronous ASPX page is for this
Data Paging via SPData Paging via SP
DataGridDataGrid ((verver 1.1) and 1.1) and GridView(verGridView(ver2.0) both do data paging2.0) both do data paging
However, the price is large However, the price is large ViewStateViewState..
Your data layer will need to return Your data layer will need to return all of the data and then the all of the data and then the DataGridDataGridwill filter all the displayed records will filter all the displayed records based on the current page. based on the current page.
Use SP to return proper page of data, Use SP to return proper page of data, only, not all data.only, not all data.
Temp table holds Order table key and an IDENTITY column, which is used for paging
Lower Bound<Temp.IndexId < Upper Bound
Returning Multiple Returning Multiple ResultsetsResultsets
Improve scalability by reducing cross Improve scalability by reducing cross process/network requestsprocess/network requests
Both Both DataSetDataSet and and SqlDataReaderSqlDataReader allow allow you to return multiple you to return multiple resultsetsresultsets
Script CallbackScript Callback
Making server round trip without page Making server round trip without page postbackpostback
Script Callback ImplementationScript Callback Implementation
Implement interface Implement interface System.Web.UI.System.Web.UI.ICallbackEventHandlerICallbackEventHandler
ImplementImplement public virtual string public virtual string RaiseCallbackEventRaiseCallbackEvent(string (string eventArgument)eventArgument)
Bind Bind jscriptjscript string to HTML controls string to HTML controls (not input type) using (not input type) using Page.ClientScript.GetCallbackEventRefPage.ClientScript.GetCallbackEventReferenceerence() method() method
Implement the interface
Implement the virtual method
Bind jscript to HTML controls
Script Callback ImplementationScript Callback ImplementationScript Callback Implementation
SummarySummarySQL Server cache dependency (SQL Server cache dependency (SqlCacheDependencySqlCacheDependency))
Custom cache dependency (Custom cache dependency (CacheDependencyCacheDependency))
PostPost--cache substitution cache substitution
Asynchronous page with parallelAsynchronous page with parallel--processed tasks processed tasks
Data paging via stored procedure Data paging via stored procedure
Returning multiple result sets from DB Returning multiple result sets from DB
Server round trip without Server round trip without postbackpostback: script callback: script callback
OTHERS (not covered in this talk):OTHERS (not covered in this talk):Windows Server 2003 featuresWindows Server 2003 features
Kernel mode caching in IIS 6.0Kernel mode caching in IIS 6.0
GzipGzip compressioncompression
Use Use mscorsvr.dllmscorsvr.dll instead of instead of mscorwks.dllmscorwks.dll
In stored proceduresIn stored proceduresUse Set NOCOUNT ON to prevent DONE_IN_PROC messagesUse Set NOCOUNT ON to prevent DONE_IN_PROC messages
Do not use Do not use sp_prefixsp_prefix in stored proc names to prevent checking in stored proc names to prevent checking into master dbinto master db
Connection poolingConnection pooling
Top Related