Best Practices for
[Link] Development
Ammar Abuthuraya
Developer & Platform Lead
Microsoft Corporation
What we will cover
Designing [Link] Web forms
Use code-behind for best performance and scalability
[Link] caching techniques
State management options
Recommendations for communicating with COM components from [Link]
Session Prerequisites
Understand .NET architecture
Working knowledge of either [Link] or C#
Knowledge of [Link] application architecture
Knowledge of ASP
Level 300
So Why This Presentation?
You know how to build ASP applications and use the same techniques to build [Link]
applications
You want to leverage the power and capabilities of [Link]
You want to use [Link] 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 Practices
Code Performance
.NET Common Language Runtime (CLR) provides big runtime performance wins
Further optimize by native code generation using [Link]
No perf difference in .NET languages
Equivalent code written in VB and C# provides equivalent performance at runtime
Language and Code Practices
Binding in [Link]
Early binding in VB performs better than
late binding
‘ VB Late Binding Example
Dim j, obj
obj = New [Link]()
for j = 0 To i
[Link](j)
Next
‘ VB Early Binding Example
Dim j as integer, obj As ArrayList
obj = New [Link]()
for j = 0 To i
[Link](j)
Next
Language and Code Practices
Language 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 Practices
COM interop Issues
Apartment threaded components are particularly
expensive in [Link]
[Link] 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 Practices
interop Recommendations
Ideally migrate COM code to .NET
Alternatively structure APIs to be less “chatty” and more “chunky”
in usage
Use COM interop through [Link]
If using apartment components, mark page to run in STA
compat mode:
<%@ Page ASPCompat=“true” %>
Language and Code Practices
interop Recommendations
Be careful not to declare any STA
component in “constructor” of page:
<%@ Page Language=“VB” ASPCompat=“true” %>
<script language=“VB” runat=server>
Dim MyComponent as New MySTAComponent() 'Bad!
</script>
<%@ Page Language=“VB” ASPCompat=“true” %>
<script language=“VB” runat=server>
Dim MyComponent as MySTAComponent
Sub Page_Load(Sender as Object, E as EventArgs)
MyComponent = New MySTAComponent()
End Sub
</script>
Demonstration 1
Language Best Practices
Early binding vs. Late Binding Using
COM objects in [Link]
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 Practices
Optimizing Server Control Rendering
Server controls provide a very clean programming model abstraction
Recommended way to build [Link] 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 Practices
Optimizing 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 Practices
Optimizing Use of Viewstate
[Link] 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 Practices
Data 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 Practices
Data Binding Best Practices
Multiple ways to do data access with .NET
SQL vs. OLEDB [Link] Provider
DataReaders vs. DataSets
Recommendations:
Always use SQL Data Provider for Microsoft ® SQL Server™ data access
Use DataReaders for [Link] data access and use DataSets only
when data caching or with web services
Demonstration 2
Server Control Design Practices
Optimizing Server Control Rendering
Optimizing Use of Viewstate
Data Validation Best Practices
Data 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 Practices
Improving User Experience
[Link] built-in caching features
Output Caching
Fragment Caching
Caches the static result of an [Link] page
Use the <%@ OutputCache %> directive to control caching behavior
Component & User Control Practices
Improving 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 [Link] to custom
vary by whatever you want (you control the cache key)
Component & User Control Practices
Improving 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 Practices
Coding Patterns in [Link]
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 Practices
Optimizing 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 Practices
Optimizing 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 3
Component & User Control Best
Practices
Buffered Output
Fragment Caching & Custom Caching
Code Behind, User Controls & Components
Data 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 Recommendations
in Proc Session State
Session state is stored in the [Link] worker process
Recycling the process will cause all session state to be lost
Session state performance is maximum in this mode
State Management Recommendations
Out 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 Recommendations
Configuring Session State
Session state can be configured via the <sessionState>
element in the [Link] file
Change causes [Link] 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 4
State Management Best Practices
State Management
Session 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 Practices
Logical 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 Practices
Physical 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 Practices
ISA for DMZ Configurations
DMZ (firewalled)
Browsers ISA [Link] SQL
Agenda
Language and Code Practices
Server Control Design Practices
Component and User Control Usage Practices
State Management Recommendations
Deployment Best Practices
Measurement Techniques
Measurement Techniques
Overview 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 Techniques
Key Performance indicators
The key performance indicators of a web application are:
Processor utilization
Low value indicates blocking on other resources
[Link]
Requests/Sec & Requests Queued
Memory
Pages Faults/Sec – lower the better, high numbers indicate insufficient memory
condition
Measurement Techniques
Stress 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 Techniques
Stress 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 Techniques
Designing 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 5
Measurement 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
[Link]
MSDN
Essential Resources for Developers
Subscription Library, OS, Professional, Enterprise,
Services Universal Delivered via CD-ROM, DVD, Web
Online MSDN Online, MSDN Flash, How-To
information Resources, Download Center
Training & MSDN Webcasts, MSDN Online
Events Seminars, Tech-Ed, PDC, Developer Days
Print MSDN Magazine
Publications MSDN News
Membership MSDN User Groups
Programs
How-To Resources
Simple, 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
[Link]
MSDN Webcasts
interactive, 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
[Link]
MSDN Subscriptions
THE way to get Visual Studio .NET
Visual Studio .NET MSDN Subscriptions
Enterprise Architect
• Software and data modeling MSDN Universal
• Enterprise templates $2799 new
• Architectural guidance $2299 renewal/upgrade
Enterprise Developer
• Enterprise lifecycle tools MSDN Enterprise
• Team development support $2199 new
• Core .NET Enterprise $1599 renewal/upgrade
NEW
Servers
Professional
• Tools to build applications MSDN Professional
and XML Web services for $1199 new
Windows and the Web $899 renewal/upgrade
Where Can I Get MSDN?
Visit MSDN Online at
[Link]
Register for the MSDN Flash Email
Newsletter at
[Link]/flash
Become an MSDN CD Subscriber at
[Link]/subscriptions
MSDN online seminars
[Link]/training/seminars
Attend More MSDN Events
MS Press
Essential Resources for Developers
Microsoft® Visual Studio® .NET is here!
This is your chance to start building the next big
thing. Develop your .NET skills, increase your
productivity with .NET Books from Microsoft Press®
[Link]/mspress
Training
Training Resources for Developers
CourseTitle: introduction to Microsoft
[Link]
Course Number:2063
Availability: Now
Detailed Syllabus: [Link]/traincert
To locate a training provider for this course, please access
[Link]/traincert
Microsoft Certified Technical Education Centers
are 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: [Link]/
mcsd