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