In this post I’ll introduce a set of performance testing classes
and practices that I use when creating automated performance tests – with one main
aim: simplify the task of measuring/verifying the performance of key areas of
my .NET applications.
Source Code:
Source Code:
Often it is not practical, nor even recommended to measure
all parts of an application – why waste time profiling sections of code that
get called infrequently? It’s also rather
difficult knowing exactly where to start profiling an application, whether it’s
server or UI, when that app either hasn’t had performance proactively “baked
in” or when you’re trying to find the root cause of an occasional freeze.
If I’m trying to isolate performance issues (or maybe
retrofitting performance tests), then I tend to start off by using any of the popular
. NET profiling apps, such as Red Gate’s ANTS.
These give me an idea of where to
look, eg for methods that are called very frequently or take a while to
run. At least this gives me a fighting
chance of where to concentrate my efforts, rather than wading through 1000s of
lines of code…needle in a hay stack springs to mind.
There are many resources available showing common coding
pitfalls, which can result in extra memory allocates that aren’t needed, making
non-deterministic functions behave in a deterministic fashion, lack of caching,
multiple enumerations etc. Such examples
include:
- string concatenation rather than using a StringBuilder,
- switch versus multiple if statements,
- caching values for ToString/GetHashCode on immutable types