You are on page 1of 41

TL24

Improving .NET Scalability


And Performance With
Visual Studio
Steve Carroll

Senior Development
Lead
Microsoft
Corporation

Ed Glas

Principal Group
Manager
Microsoft Corporation

Outline
Performance

lifecycle
Diagnosing common .NET
performance problems

One Last
Walkthrough
Before Launch

We Got Lucky!

Visual Studio Team System


provides performance tools
to support you throughout
the software lifecycle

Performance Lifecycle

Maintenance

Gathering
requirements

Design

Development

Deployment
Testing

Performance Requirements

Gathering
requirements

Example Performance Requirement


Scenario

Test Environment

Requirem
ent

Goal

Home page

Perf Environment #1

2s

1.5s

Search results page 10


results

Perf Environment #1

3s

4s

Checkout complete

Perf Environment #1

5s

4s

E#1

Machine

Client

Dell WS 650

CPU

RA
M

Disk

1P 2.2
Ghz

1GB

7.5k eSata (100


GB)

Network
600kb

App
Server
Dell PE 6650
4P 2.2 Ghz 4GB
2x15k RPM SCSI
1Gb
3 x 7.2 K SATA (480
Application
SQL
GB)
Server
15 x
7.2 k items,
SATA2 1,500 orders
1,000 restaurants, 50,000
menu
Data Size
HP DT 9250

Work load
Throughput

8P 2.6 Ghz 16GB

1,000 virtual users


100 home pages/sec
50 searches/sec
2 checkouts/sec

(3 TB)

1Gb

Performance Lifecycle

Gathering
requirements

Design

Design Phase

Exploratory performance tests


Prototype

to validate architecture
Run end-to-end performance tests

Run tests to isolate your


UI
servers performance

Design

Action layer
Service API

Service API

Web app

Web app

Database

Database

Run tests to
isolate
performance of
your
dependencies

Now that we have the requirements


we are ready to implement and test

demo
Case Study:
Performance And
Stress Testing
Team Foundation
Server

TFS Perf Trends Report

TFS Perf Report


Pri Scenario

Goal Actual

Delta
Goal

Delta
build

Bug

WebAccess: Run a query for


100 items
3.5 9.00 -157% -111% 518511
VC: CommandLine - Rollback
1000 edits and folder rename
30 49.61 -65%
9% 416557
WIT: UI - VS startup with
connected Team Explorer (warm) 0.53 0.85 -61%
29% 535042

1
1

Office Integration: Excel - Get


100 work items from picker
WIT: Run a In Group query

1
0.75

VC: UI - Open from SCC

165.9
120
7

2
2

1.54
1.06

-54% -147% 468117


-41%
31% 468113

-38%

-26% 510958

TFS Stress Trends Report

TFS Transaction Analysis

Application
Version
Control
Version
Control
Integration
Integration
WorkItem
Tracking
WorkItem
Tracking
Version
Control

Command
Download

count
747181
7

Percenta
ge

Test Weight
from
Dogfood
Server

82.98%

83.64%

QueryItems
IsMember
ReadIdentity
PageWorkitemsB
yIds

470287
173575
136990

5.22%
1.93%
1.52%

5.24%
2.01%
1.67%

93075

1.03%

1.56%

QueryWorkitems
UpdateLocalVersi
on

84577

0.94%

1.10%

75809

0.84%

1.23%

TFS Best Practices

Start early
Focus on key scenarios
Run tests regularly
Measure against requirements
Spend tuning time wisely

demo
Using UI Tests as
Performance Tests
and JScript Profiling

Types Of Performance Tests


UI Test
Manual
Test

Web
Test

UI
Action Layer
Service
Service
API
API
Web App

Web App

Database

Database

Target Layer

Web
Server
Web App

Single
User

Unit
Test

Typical Load
Peak Load

Web App
Database

Database

Small
DB

Expected
Data Size

Peak Data
Size
Data Scale

# Users

Deployment And Maintenance

demo
Run To Run
Comparison Of
Load Tests

Anticipating Common .NET


Performance Problems

Performance Code Analysis


public struct BusinessValueType
{
public int Value;
public string Name;
}

Performance Quiz
<asp:SqlDataSource ID="SqlDataSource2"
runat="server"
ConnectionString= ProviderName="
SelectCommand="SELECT * FROM ... ">
</asp:SqlDataSource>
Select Company:
<asp:DropDownList
ID="ddl1" runat="server
DataTextField="Company Name"
DataValueField=Company ID
OnSelectedIndexChanged="Selection_Change>
</asp:DropDownList>

About Generational GC
Theory

Objects that were just allocated will


soon die
Objects that have been alive for some
time
will keep on living

Dead
livingstart
objects
objects
are allocated
are
are found
promoted
incollection!
Gen 0
GenNew
0Still
isobjects
full,
garbage

Large object heap

Gen 0

Gen 1

Gen 2

Three Bad Allocation Patterns


Midlife crisis
2. Managed leaks
3. Large object heap
1.

demo
Diagnosing
Memory Issues

Detecting .NET Locking Problems


Locks are the up and coming
bottleneck
Multicore revolution
Contention profiling

Low overhead
Non-intrusive

demo
Contention
Profiler

What's Cool And New In


Visual Studio Team System 10

VSTS 10 Web And Load Test Features

Collect more analysis data

Remote profiler integration


Sys Info data collection

Extensible

data collectors to

support
more platforms

Run to run reports in Microsoft


Excel
Load test log visualization
Run functional tests as

VSTS 10 Profiler New Features

Now works under virtualization!


New function details page
Rules and guidance to help detect
common problems
JScript profiling
Just my code profiling
Many usability enhancements

Visual Studio Team System


provides performance tools
to support you throughout
the software lifecycle

Resources

Know your tools!

Profiler blog:
http://blogs.msdn.com/profiler
Web/load test blog:
http://blogs.msdn.com/edglas
Forums:
http://social.msdn.microsoft.com/for
ums/en-US/vstswebtest/threads/
http://social.msdn.microsoft.com/Foru
ms/en-US/vstsprofiler/threads/

Know your platform!

Related Sessions
Sessio
n ID

Session Title

TL19

Bringing Out The Best In Multicore Systems

BB07

SQL Server 2008: Developing Large Scale Web


Applications And Services

TL38

WCF: Zen Of Performance And Scale

PC53

Building High Performance JScript Applications

TL60

Improving Code Quality With Code Analysis

TL03

Microsoft Visual Studio Team System: Software diagnostics


and quality

Evals & Recordings

ll
fi
e
s
a
Ple
ur
o
y
t
u
o
n
o
i
t
a
u
l
eva
s
for thi
t:
a
n
o
i
s
ses

This se
ssion
will be
availab
l e as
a recor
ding
a t:

www.microsoftpdc.com

QA
&

Please use the microphones provided

2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks
in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft
must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of
any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS
PRESENTATION.

You might also like