What features should a C#/.NET profiler have?
There is EQATEC Profiler that's a free .Net profiler that I have been meaning to use.
One thing I would like to see is Mono compatibility. I have started dabbling in Mono, and it would be great to have a .Net and Mono profiler!
My wish list:
- Really easy to use - simple (yet powerful) GUI
- Spectacular performance - ability to profile apps that are under extremely heavy usage.
- X64 and X32 support
- Understands SQL, is able to give me stack traces and duration for all my SQL calls, coupled with SQL.
- Easy to profile, no need to go through a complex, recompile the app process.
- Easy to profile services, web sites and processes which are launched as side effects
- A "production mode" which allows you to gather key stats from a production based system.
- "Automatic bottleneck finder" : run against a production app and using heuristics determine which methods are slow.
- Per thread analysis, tell me which threads are doing all the work and where.
- Profile at various granularities, allow to perform a "cheap" profile that only gathers key info and dig in with granular profiling.
- Exception tracker, allow me to track all the exceptions which are thrown in my app (key stats and detailed info)
- Per thread profiling - allow me to profile a single thread in an app
My requirements:
- Collect stats without impact to application - e.g. don't fill up memory, allow data to be collected away from apps under question
- Ability to specify measurements simply and repeatably (data driven)
- Automatable so that I can repeat measurements without point and click, and without UI
- Enable us to understand issues related to the WPF and other declarative technologies such as DLR or WF
- No installation - no gac, msi etc, even better if can be run over a network
- Support 64 bit from outset
- Don't try to know all the the analysis that could be done - encourage an ecosystem. If the raw stats can be analysed using other tools so much the better.
- UI if any should be good - but its the stats that matter. So don't spend time on that, get the core profiling good.
- Support profiling of apps that are not straight exe's like services and web applications simply.
would likes:
- Consider cross app support - big apps often need to understand apps performance behavior across many executables. If your profiler allows easy correlation of this data then so much the better