Best Practices for ASP.NET Development
Ammar AbuthurayaDeveloper & Platform LeadMicrosoft Corporation
What we will cover Designing ASP.NET Web forms Use code-behind for best performance and scalability ASP.NET caching techniques State management options Recommendations for communicating with COM components from ASP.NET
Session Prerequisites
Level 300Level 300
Understand .NET architectureWorking knowledge of either VB.NET or C#Knowledge of ASP.NET application architectureKnowledge of ASP
So Why This Presentation?You know how to build ASP applications and use the same techniques to build ASP.NET
applicationsYou want to leverage the power and capabilities of ASP.NET You want to use ASP.NET to build high-performance, scalable, web-based applications
Demonstrations Language best practices Server Control design practices Component & user control design State management recommendations Caching techniques Measuring performance
Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques
Language and Code PracticesCode Performance
.NET Common Language Runtime (CLR) provides big runtime performance wins Further optimize by native code generation using NGEN.EXE No perf difference in .NET languages
Equivalent code written in VB and C# provides equivalent performance at runtime
Language and Code PracticesBinding in VB.NET
Early binding in VB performs better than late binding
‘ ‘ VB Late Binding ExampleVB Late Binding Example
Dim j, objDim j, objobj = New System.Collections.ArrayList()obj = New System.Collections.ArrayList()for j = 0 To ifor j = 0 To i obj.Add(j)obj.Add(j)NextNext
‘ ‘ VB Early Binding ExampleVB Early Binding Example
Dim j as integer, obj As ArrayListDim j as integer, obj As ArrayListobj = New System.Collections.ArrayList()obj = New System.Collections.ArrayList()for j = 0 To ifor j = 0 To i obj.Add(j)obj.Add(j)NextNext
Language and Code PracticesLanguage Recommendations Avoid using late binding in VB
Explicitly declare all variable types (Dim a as Long) Avoid late bound methods on Object type
Use <%@ Page Language=“VB” Explicit=“true” %> Requires all variables to be declared (DIM required) Still enables late bound code to exist though
<%@ Page Language=“VB” Strict=“true” %> Disallows any late bound code to be used
Language and Code PracticesCOM interop Issues
Apartment threaded components are particularly expensive in ASP.NET ASP.NET now uses MTA thread pool by default that has
very bad perf side effects when running STA components
This affects all VB6( STA) components!
Language and Code Practicesinterop Recommendations
Ideally migrate COM code to .NET Alternatively structure APIs to be less “chatty” and more “chunky”
in usage Use COM interop through System.Runtime.interopServices
If using apartment components, mark page to run in STA compat mode: <%@ Page ASPCompat=“true” %>
Language and Code Practicesinterop Recommendations Be careful not to declare any STA
component in “constructor” of page:<%@ Page Language=“VB” ASPCompat=“true” %><%@ Page Language=“VB” ASPCompat=“true” %>
<script language=“VB” runat=server><script language=“VB” runat=server>
Dim MyComponent as New MySTAComponent() 'Bad!Dim MyComponent as New MySTAComponent() 'Bad!
</script></script>
<%@ Page Language=“VB” ASPCompat=“true” %><%@ Page Language=“VB” ASPCompat=“true” %>
<script language=“VB” runat=server><script language=“VB” runat=server>
Dim MyComponent as MySTAComponentDim MyComponent as MySTAComponent
Sub Page_Load(Sender as Object, E as EventArgs)Sub Page_Load(Sender as Object, E as EventArgs)
MyComponent = New MySTAComponent()MyComponent = New MySTAComponent()
End SubEnd Sub
</script></script>
Demonstration 1Language Best Practices
Early binding vs. Late Binding Using COM objects in ASP.NET
Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques
Server Control Design PracticesOptimizing Server Control Rendering
Server controls provide a very clean programming model abstraction Recommended way to build ASP.NET pages
Server controls do more rendering/postback work than old-style <%= %> code Should understand what this work is and optimize for it accordingly
Two areas to think about and optimize: Rendering Content ViewState Postback
Server Control Design PracticesOptimizing Server Control Rendering
Server controls encapsulate rendering markup logic at runtime Handle style and automatic uplevel/downlevel functionality management
individual server controls each add slight additional rendering cost Additional allocations for style management Additional allocations for control itself
Net take: the more individual server controls on page, the more this overhead can be noticed Need to be especially aware of this w/ composite list controls that generate multiple controls per
data row
Server Control Design PracticesOptimizing Use of Viewstate ASP.NET allows pages/controls to maintain state across round trips by storing state within hidden
“viewstate” field Disabled with “EnableViewState” attribute Some downsides:
increases network payload Performance overhead to serialize this
Recommendation: Always review your usage of this feature Always disable if you are not doing postback Disable on per control basis if possible Use <%@ Page Trace=“true” %> to track usage size
Server Control Design PracticesData Validation Techniques
Leverage client side scripting capabilities to perform validations
Perform validation on both server & client side to avoid validation bypass
Make appropriate use of the RequiredFieldValidator Use RegularExpressionValidator for validating complex field
types like Credit Card
Server Control Design PracticesData Binding Best Practices
Multiple ways to do data access with .NET SQL vs. OLEDB ADO.NET Provider DataReaders vs. DataSets
Recommendations: Always use SQL Data Provider for Microsoft® SQL Server™ data access Use DataReaders for ASP.NET data access and use DataSets only
when data caching or with web services
Demonstration 2Server Control Design Practices
Optimizing Server Control RenderingOptimizing Use of Viewstate
Data Validation Best PracticesData Binding Best Practices
Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques
Component & User Control PracticesImproving User Experience
ASP.NET built-in caching features Output Caching Fragment Caching
Caches the static result of an ASP.NET page Use the <%@ OutputCache %> directive to control caching behavior
Component & User Control PracticesImproving User Experience
Caching Options: Duration - Time item exists in the cache VaryByParam - Varies cache entries by Get/Post params. Name
param, separate by semi-colons, supports * VaryByHeader - Varies cache entries by Http header VaryByCustom - Override method within Global.asax to custom
vary by whatever you want (you control the cache key)
Component & User Control PracticesImproving User Experience
Caching the entire page isn’t always possible Partial page personalization, etc.
Fragment Caching allows caching regions of a page by using user controls (.ascx) User controls define <%@ OutputCache %> directive
Component & User Control PracticesCoding Patterns in ASP.NET Common coding patterns:
Spaghetti – include all presentation logic and code in the same page like classic ASP
Code behind – all presentation logic is in the aspx file, which is linked to a separate code behind file
Component – business logic is present in a compiled component, which is invoked for providing various services
There is no perf difference between a dynamically compiled .aspx (“spaghetti”) and “code behind” style page
Component & User Control PracticesOptimizing Data Flow Across Tiers
Data exchange across tiers has to be optimized for the deployment scenario
Avoid passing datasets across tiers Use DataReaders for fast, forward-only access to the data
stream XML is very verbose; suitable for communications with
unknown systems
Component & User Control PracticesOptimizing Data Flow Across Tiers
Minimize the number of post backs Leverage client side capabilities to avoid post backs Control the amount of view state information passed
during a post back Use EnableViewState at page or control level to configure
view state usage.
Demonstration 3Component & User Control Best
Practices
Buffered OutputFragment Caching & Custom Caching
Code Behind, User Controls & ComponentsData Flow Across Tiers
Optimizing Postback
Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques
State Management Recommendationsin Proc Session State
Session state is stored in the ASP.NET worker process Recycling the process will cause all session state to be lost Session state performance is maximum in this mode
State Management RecommendationsOut of Proc Session State
Session state can be stored in a State server process running on the same machine or a different machine
State can also be stored in a SQL Server database Restarting the web server does not cause the session state to
be lost More reliable than in process session state but less
performant
State Management RecommendationsConfiguring Session State
Session state can be configured via the <sessionState> element in the web.config file
Change causes ASP.NET application to be restarted, all new sessions will be stored as per the updated session configuration
Out of process session state stores like State Server or SQL Server must be started & configured properly
Demonstration 4State Management Best Practices
State ManagementSession State in A State Server
Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques
Deployment Best PracticesLogical Design
Design your applications using logical 3-Tier Design Practices: Pages (.aspx) and User Controls (.ascx) Reusable Biz Classes in \bin dir (.vb + .cs) Data within a SQL Database
Design your Web application so that it can be distributed across a Web farm Your code shouldn’t assume that a client will always return to the same machine Be careful of assumptions regarding statics and application state
Deployment Best PracticesPhysical Deployment Deploy your applications such that the pages and components run in
same process Deploying onto remote servers connected via DCOM or Web Services will almost
always hurt your performance/scalability Leverage Web services only for application to application communication -- not
intra app calls
Leverage ISA Server for configurations where a DMZ security zone is required Enables you to restrict app server access from browser clients
Deployment Best PracticesISA for DMZ Configurations
ISAISA ASP.NETASP.NET SQLSQL
DMZ (firewalled)DMZ (firewalled)
BrowsersBrowsers
Agenda Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Deployment Best Practices Measurement Techniques
Measurement TechniquesOverview of Application Center Test
Application Center Test (ACT) is a tool designed for stress testing web servers The tool assists in determining performance and scalability of a given web site The tool also collect useful statistical information during the stress test ACT also exposes a programming interface, which can be used for creating stress test scripts
Measurement TechniquesKey Performance indicators
The key performance indicators of a web application are: Processor utilization
Low value indicates blocking on other resources
ASP.NET Requests/Sec & Requests Queued
Memory Pages Faults/Sec – lower the better, high numbers indicate insufficient memory
condition
Measurement TechniquesStress Testing Stress testing is a defensive mechanism to creating scalable web
sites Stress runs will indicate the scalability of the application
Can be used to determine scale of operation, when to add new hardware etc
Stress testing should not be the final step in building a web application. It should be integrated into the development life cycle
Narrow the scope of a stress run to get more accurate, actionable results
Measurement TechniquesStress Testing
Use the web site logs to determine operational load Stress tools like WAS (“Homer”) allow log files to be
“replayed” on a web site and record statistical performance information
Run performance monitoring tools on the live servers to identify scalability issues
Measurement TechniquesDesigning Scalable Applications Two ways to quantify Web performance:
Machine Throughput (requests/sec) Response Time (time to first/last bytes)
Measure performance by stressing server Utilize multiple client stress machines Use Application Center Test tool
Measure multiple scenarios: Simulate end to end scenario walkthroughs of site Measure individual page performances
Demonstration 5Measurement Techniques
Performance Measurement
Session Summary in this session we discussed:
Language and Code Practices Server Control Design Practices Component and User Control Usage Practices State Management Recommendations Caching Techniques Deployment Best Practices Measurement Techniques
for More information… MSDN Web site at
msdn.microsoft.com
Training & Training & EventsEvents
MSDN Webcasts, MSDN Online MSDN Webcasts, MSDN Online Seminars, Tech-Ed, PDC, Developer DaysSeminars, Tech-Ed, PDC, Developer Days
MSDNEssential Resources for Developers
Subscription Subscription ServicesServices
OnlineOnlineinformationinformation
MembershipMembershipProgramsPrograms
Print Print PublicationsPublications
Library, OS, Professional, Enterprise, Library, OS, Professional, Enterprise, Universal Delivered via CD-ROM, DVD, WebUniversal Delivered via CD-ROM, DVD, Web
MSDN Online, MSDN Flash, How-To MSDN Online, MSDN Flash, How-To Resources, Download CenterResources, Download Center
MSDN User GroupsMSDN User Groups
MSDN MagazineMSDN MagazineMSDN NewsMSDN News
How-To ResourcesSimple, Step-By-Step Procedures Embedded Development How-To Resources General How-To Resources integration How-To Resources JScript .NET How-To Resources .NET Development How-To Resources office Development Resources Security How-To Resources Visual Basic® .NET How-To Resources Visual C#® .NET How-To Resources Visual Studio® .NET How-To Resources Web Development How-To Resources (ASP, IIS, XML) Web Services How-To Resources Windows® Development How-To Resources
http://msdn.microsoft.com/howto
MSDN Webcastsinteractive, Live Online Event
interactive, Synchronous, Live Online Event
Discuss the Hottest Topics from Microsoft
Open and Free for The General Public Takes Place Every Tuesdays
http://www.microsoft.com/usa/webcasts
MSDN Subscriptions THE way to get Visual Studio .NETVisual Studio .NETVisual Studio .NET MSDN SubscriptionsMSDN Subscriptions
NE
W
ProfessionalProfessional• Tools to build applications Tools to build applications
and XML Web services for and XML Web services for Windows and the WebWindows and the Web
MSDN ProfessionalMSDN Professional$1199 new$1199 new
$899 renewal/upgrade$899 renewal/upgrade
MSDN EnterpriseMSDN Enterprise$2199 new$2199 new
$1599 renewal/upgrade$1599 renewal/upgrade
MSDN UniversalMSDN Universal$2799 new$2799 new
$2299 renewal/upgrade$2299 renewal/upgrade
Enterprise DeveloperEnterprise Developer• Enterprise lifecycle toolsEnterprise lifecycle tools• Team development supportTeam development support• Core .NET Enterprise Core .NET Enterprise
ServersServers
Enterprise ArchitectEnterprise Architect• Software and data modelingSoftware and data modeling• Enterprise templatesEnterprise templates• Architectural guidanceArchitectural guidance
Where Can I Get MSDN? Visit MSDN Online at
msdn.microsoft.com Register for the MSDN Flash Email
Newsletter at
msdn.microsoft.com/flash Become an MSDN CD Subscriber at
msdn.microsoft.com/subscriptions MSDN online seminars
msdn.microsoft.com/training/seminars Attend More MSDN Events
MS PressEssential Resources for Developers
Microsoft® Visual Studio® .NET is here!Microsoft® Visual Studio® .NET is here!This is your chance to start building the next big This is your chance to start building the next big
thing. Develop your .NET skills, increase your thing. Develop your .NET skills, increase your productivity with .NET Books from Microsoft Press®productivity with .NET Books from Microsoft Press®
www.microsoft.com/mspresswww.microsoft.com/mspress
TrainingTraining Resources for DevelopersCourse Title: introduction to Microsoft
ASP.NET Course Number:2063 Availability: Now Detailed Syllabus: www.microsoft.com/traincert
To locate a training provider for this course, please accessTo locate a training provider for this course, please access
www.microsoft.com/traincert Microsoft Certified Technical Education Centers Microsoft Certified Technical Education Centers
are Microsoft’s premier partners for training servicesare Microsoft’s premier partners for training services
Become A Microsoft Certified Solution Developer
What is MCSD? Microsoft Certified Solution Developer The premier certification for lead developers who
design and develop leading-edge enterprise solutions with Microsoft development tools, technologies, and the Microsoft .NET Framework.
How do I attain the MCSD for Microsoft .NET certification? 4 core exams 1 elective exam
For complete information visit: www.microsoft.com/mcsd
Top Related