patterns and practices Developer Center
J.D. Meier, Srinath Vasireddy, Ashish Babbar, and Alex Mackman
Microsoft Corporation
April 2004
Related Links
Buy "Improving .NET Application Performance and Scalability" book
Summary: This guide provides end-to-end guidance for managing performance and scalability throughout your application life cycle to reduce risk and lower total cost of ownership. It provides a framework that organizes performance into a handful of prioritized categories where your choices heavily impact performance and scalability success. The logical units of the framework help integrate performance throughout your application life cycle. Information is segmented by roles, including architects, developers, testers, and administrators, to make it more relevant and actionable. This guide provides processes and actionable steps for modeling performance, measuring, testing, and tuning your applications. Expert guidance is also provided for improving the performance of managed code, ASP.NET, Enterprise Services, Web services, remoting, ADO.NET, XML, and SQL Server.
Download | |
Community | |
Feedback |
Contents
Abstract
Table of Contents
Feedback and Support
The Team Who Brought You This Guide
Abstract
This guide covers Microsoft's recommendations on how to build .NET applications that meet your performance objectives. The guidelines in this guide applies to various roles involved in the life cycle, including architects, designers, developers, testers, and administrators. The overall scope of the guide is shown in Figure 1.
Figure 1: The scope of the guide
The guidance is organized by categories, principles, roles, and stages of the life cycle:
- Performance objectives enable you to know when your application meets your performance goals.
- Performance modeling provides a structured and repeatable approach to meeting your performance objectives.
- Architecture and design guidelines enable you to engineer for performance from an early stage.
- A performance and scalability frame enables you to organize and prioritize performance issues.
- Measuring lets you see whether your application is trending toward or away from the performance objectives.
Table of Contents
- Letter to Our Customers
- Foreword by Rico Mariani
- Foreword by Brandon Bohling
- Foreword by Connie U Smith
- Foreword by Scott Barber
- Introduction
- Performance Best Practices at a Glance
- Fast Track
Part I, Introduction to Engineering for Performance
This part shows you how to apply performance considerations throughout your application life cycle and introduces fundamental performance and scalability concepts and terminology. Part I includes one chapter:
- Chapter 1, "Fundamentals of Engineering for Performance"
Part II, Designing for Performance
Performance modeling helps you assess your design choices before committing to a solution. By considering from the start your performance objectives, workload, and metrics for your scenarios, you reduce risk. Use the design guidelines chapter to learn practices, principles, patterns, and anti-patterns that will help you to make informed choices. Part II includes three chapters:
- Chapter 2, "Performance Modeling"
- Chapter 3, "Design Guidelines for Application Performance"
- Chapter 4, "Architecture and Design Review of a .NET Application for Performance and Scalability"
Part III, Application Performance and Scalability
This part provides a series of chapters that provide deep platform knowledge across the .NET Framework technologies. Use these chapters to learn about the key performance and scalability considerations for the various .NET technologies, and to improve the efficiency of your code in these areas. Part III includes nine chapters:
- Chapter 5, "Improving Managed Code Performance"
- Chapter 6, "Improving ASP.NET Performance"
- Chapter 7, "Improving Interop Performance"
- Chapter 8, "Improving Enterprise Services Performance"
- Chapter 9, "Improving XML Performance"
- Chapter 10, "Improving Web Services Performance"
- Chapter 11, "Improving Remoting Performance"
- Chapter 12, "Improving ADO.NET Performance"
- Chapter 13, "Code Review: .NET Application Performance"
Part IV, Database Server Performance and Scalability
This part shows how to improve SQL Server performance. This part includes one chapter:
- Chapter 14, "Improving SQL Server Performance"
Part V, Measuring, Testing, and Tuning
This part shows which metrics monitor and analyze for specific performance aspects. It also explains how to load, stress, and capacity test your applications and how you can tune performance with appropriate application, platform, and system configuration. This part includes three chapters:
- Chapter 15, "Measuring .NET Application Performance"
- Chapter 16, "Testing .NET Application Performance"
- Chapter 17, "Tuning .NET Application Performance"
Checklists
This section contains printable, task-based checklists, which are quick reference sheets to help you put the information and details that you learned in the individual chapters into action. This section includes the following checklists:
- "Checklist: ADO.NET Performance"
- "Checklist: Architecture and Design Review for Performance and Scalability"
- "Checklist: ASP.NET Performance"
- "Checklist: Enterprise Services Performance"
- "Checklist: Interop Performance"
- "Checklist: Managed Code Performance"
- "Checklist: Remoting Performance"
- "Checklist: SQL Server Performance"
- "Checklist: Web Services Performance"
- "Checklist: XML Performance"
How To Articles
This section contains How To articles that provide step-by-step procedures for key tasks. This section includes the following How To articles:
- "How To: Improve Serialization Performance"
- "How To: Monitor the ASP.NET Thread Pool Using Custom Counters"
- "How To: Optimize SQL Indexes"
- "How To: Optimize SQL Queries"
- "How To: Page Records in .NET Applications"
- "How To: Perform Capacity Planning for .NET Framework Applications"
- "How To: Scale .NET Applications"
- "How To: Submit and Poll for Long-Running Tasks"
- "How To: Time Managed Code Using QueryPerformanceCounter and QueryPerformanceFrequency"
- "How To: Use ACT to Test Performance and Scalability"
- "How To: Use ACT to Test Web Services Performance"
- "How To: Use Custom Performance Counters from ASP.NET"
- "How To: Use CLR Profiler"
- "How To: Use EIF"
- "How To: Use SQL Profiler"
Feedback and Support
We have made every effort to ensure the accuracy of this guide and its companion content.
We are particularly interested in feedback regarding the following:
- Technical issues specific to recommendations
- Usefulness and usability issues
- Writing and editing issues
Technical Support
Technical support for the Microsoft products and technologies referenced in this guide is provided by Microsoft Product Support Services (PSS). For product support information, please visit the Microsoft Product Support Web site at http://support.microsoft.com.
The Team Who Brought You This Guide
This guide was produced by the following .NET development specialists:
- J.D. Meier, Microsoft, Program Manager, patterns & practices
- Srinath Vasireddy, Microsoft, Program Manager, patterns & practices
- Ashish Babbar, Infosys Technologies Ltd
- Alex Mackman, Content Master Ltd, Founding member and Principal Technologist
Contributors and Reviewers
Many thanks to the following contributors and reviewers:
- Special thanks to key contributors: Anandha Murukan; Andy Eunson; Balan Jayaraman, Infosys Technologies Ltd; Christopher Brumme (CLR and COM interop); Connie U. Smith, Ph.D.; Curtis Krumel (SQL Server); David G. Brown (SQL Server); Denny Dayton; Don Willits ("Uber man"); Edward Jezierski; Ilia Fortunov; Jim O'Brien, Content Master Ltd; John Allen (ASP.NET); Matt Odhner (ACT); Prabhaker Potharaju (SQL Server); Rico Mariani (Performance Modeling, CLR, Code Review, Measuring); Ray Escamilla (Tuning); Scott Barber (Performance Modeling and Testing); Sharon Bjeletich (SQL Server)
- Special thanks to key reviewers: Adam Nathan (Interop); Brad Abrams; Brandon Bohling, Intel Corporation; Carlos Farre, Solutions IQ; Chuck Delouis, Veritas Software (SQL Server); Cosmin Radu (Interop); Eddie Lau (ACE); Eric Morris (ACE); Erik Olsen (ASP.NET); Gerardo Bermudez (CLR, Performance Modeling); Gregor Noriskin; Ken Perilman; Jan Gray; John Hopkins (ACE); Joshua Lee; K.M. Lee (ACE TEAM); Mark Fussell (XML); Matt Tavis (Remoting); Nico Jansen (ACE Team); Pablo Castro (ADO.NET and SQL); Patrick Dussud (CLR); Riyaz Pishori (Enterprise Services); Richard Turner (Enterprise Services); Sonja Keserovic (Interop); Thomas Marquardt (ASP.NET); Tim Walton; Tom McDonald; Wade Mascia (ASP.NET threading, Web services, and Enterprise Services); Yasser Shohoud (Web services)
- Thanks to external reviewers: Ajay Mungara, Intel Corporation; Bill Draven, Intel Corporation; Emil Lerch, Intel Corporation; Carlos Santos (Managed Code); Chris Mullins, Kiefer Consulting; Christopher Bowen, Monster.com; Chuck Cooper; Dan Sullivan; Dave Levine, Rockwell Software; Daniel Cazzulino, Lagash Systems SA; Diego Gonzalez, Lagash Systems SA (XML); Franco Ceruti; Fredrik Normen "N2", Barium AB (extensive review); Grant Fritchey; Greg Buskirk; Greg Kiefer, Kiefer Consulting; Ingo Rammer, IngoRammer.com; James Duff, Vertigo Software; Jason Masterman, Barracuda .NET (Remoting); Jeff Fiegel, Acres Gaming; Jeff Sukow, Rockwell Software; John Lam; John Vliet, Intel Corporation; Juval Lowy (COM interop); Kelly Summerlin, TetraData; Mats Lanner, Open Text Corporation; Matt Davey; Matthew Brealey; Mitch Denny, Monash.NET; Morten Abrahamsen (Performance and Transactions); Nick Wienholt, dotnetperformance.com; Norm Smith (Data Access and Performance Modeling); Pascal Tellier, prairieFyre Software Inc.; Paul Ballard, Rochester Consulting Partnership, Inc.; Per Larsen (Managed Code Performance); Scott Allen (Design Guidelines); Philippe Harry Leopold Frederix (Belgium); Scott Stanfield, Vertigo Software; Ted Pattison, Barracuda .NET (COM Interop); Thiru Thangarathinam; Tim Weaver, Monster.com; Vivek Chauhan (NIIT); Thiru Thangarathinam; Wat Hughes, Creative Data (SQL Server)
- Microsoft Consulting Services and Product Support Services (PSS): Dan Grady; David Madrian; Eddie Clodfelter; Hugh Wade; Jackie Richards; Jacquelyn Schmidt; Jaime Rodriguez; James Dosch; Jeff Pflum; Jim Scurlock; Julian Gonzalez (Web services); Kenny Jones; Linnea Bennett; Matt Neerincx; Michael Parkes; Michael Royster; Michael Stuart; Nam Su Kang; Neil Leslie; Nobuyuki Akama; Pat Altimore; Paul Fallon; Scott Slater; Tom Sears; Tony Bray
- Microsoft Product Group: Alexei Vopilov (Web services); Amrish Kumar; Arvindra Sehmi; Bill Evans; Brian Spanton; Keith Ballinger (WSE); Scot Gellock (Web services); Brian Grunkemeyer (CLR); Chris Eck; David Fields (NT); David Guimbellot; David Mortenson (CLR); Dax Hawkins; Dhananjay Mahajan (Enterprise Services); Dino Chiesa; Dmitry Robsman; Doug Rothaus (ADO.NET); Eddie Liu; Elena Kharitidi (Web services); Fabio Yeon; Harris Syed (Enterprise Services); Jason Zander; Jeffrey Cooperstein; Jim Radigan; Joe Long (Web services vs. ES vs. Remoting); Joshua Allen; Larry Buerk; Lubor Kollar (SQL Server); Maoni Stephens; Michael Coulson; Michael Fanning; Michael Murray (FxCop); Omri Gazitt; Patrick Ng (FX DEV); Peter Carlin (SQL Server); Rebecca Dias (WSE); Rick Vicik; Robin Maffeo (CLR Thread pool); Vance Morrison; Walter Stiers; Yann Christensen
- Thanks to our patterns & practices members for technical feedback and input: Jason Hogg (ADO.NET and XML); Naveen Yajaman; Sandy Khaund; Scott Densmore; Tom Hollander; Wojtek Kozaczynski
- Thanks to our test team: (Infosys Technologies Ltd): Austin Ajit Samuel Angel; Dhanyah T.S.K; Lakshmi; Prashant Bansode; Ramesh Revenipati; Ramprasad Gopalakrishnan; Ramprasad Ramamurthy; Terrence J. Cyril
- Thanks to our editors for helping to ensure a quality experience for the reader: Sharon Smith; Tina Burden McGrayne, Entirenet; Susan Filkins, Entirenet; Tyson Nevil, Entirenet
- Thanks to our product manager: Ron Jacobs
- Finally, thanks to: Alex Lowe; Chris Sells; Jay Nanduri; Nitin Agrawal; Pat Filoteo; Patrick Conlan (SQL Server); Rajasi Saha; Sanjeev Garg (Satyam Computer Services); Todd Kutzke