Performance, Measure and ANTS Profiler
Might need to create a separate page for notes on performance since
I've been doing a lot of C# and database tuning lately but having them
on this post so far. Here are some of my notes on performance [more]
* Before you optimize, ensure that your results are accurate first
before optimizing. I would suggest Test Driven Development or at least
some unit testing but that's another story. Just make sure your results
are correct first otherwise your optimization is useless.
* Before you optimize, always MEASURE MEASURE MEASURE
* If you can measure without introducing extra code, go with it. Aside
from saving time, it will keep your code clean and introduce what could
be unnecessary complexity. And for this very reason I just purchase ANTS Profiler 4
from RedGate software. Another alternative is dotNetTrace from
JetBrains and although I love Resharper from the same company I prefer
ANTS profiler. I said prefer because as I haven't explored dotNetTrace
that much, i would say it is really preference, UI/usability and being
able to view the timings embedded in a window which shows the source
code. Also like the call graph, drill down on significant methods in
terms of time spent on it. I got a quote for a no support/update
version of the software when I emailed RedGate about their pricing
which is admittedly very high for a personal purchase when you are
earning from a 3rd world country. So will be receiving fixes but not
major upgrades (so as they say but haven't dug deep - besides the
version looks pretty good and turns out to be very useful for me
already). It really sucks to try to optimize something only to find out
that it is not the bottleneck
* If your application involves database access and you're slow then
more often than not your database is not tuned. And SQL Profiler and
Database Tuning Advisor is a very good start. You can apply the
recommendations or you can just evaluate them and make your own
adjustments. In my experience however the recommended changes does make
a lot of performance improvement. You think you know enough about
indexes and database design? You might be surprised how much
performance you can gain from these tools.
Again measure, measure, measure but if you can only identify some specific parts then data access seems like a good start.
* Then look into you application logic. Even if your code is optimized
but your algorithm/logic is wrong, it will still turn out bad
* Also know about database/table statistics, indexed views and
partition. If you can take advantage of partitions and involving
considerable data access the improvement is quite impressive.
* <string>.SubString(...) does some considerable lifting so if
you want to check if the first two chars in a string is equal to some
other string then you should consider using <string>.StartsWith
instead or avoid the SubString if you can
* Hashtable is faster than SortedDictionary, SortedList or List. I
know I should provide stats for this (have a URL somewhere and will
update this soon)
* When using nullable types, use <variable>.HasValue as much
as possible than comparing using != null. Or even
"!<var>.HasValue" vs. "== null". But avoid negation if you have
to
Finally this list will grow soon hopefully and if feel like you
disagree please feel free to comment and have other benefit from your
thoughts too :)
Taken from : .NET Developer Notes on Performance, Measure and ANTS Profiler