Choosing the Right View for Snapshot Data
After a profiling session is over, dotTrace creates a performance snapshot. You can further work with this snapshot, investigating and analyzing application performance problems. Let's take a look at using various analysis views provided by dotTrace to diagnose these problems:
This view helps find out details of the profiling process and some general information about a snapshot. In addition, it lets you look through the list of annotated or adjusted functions.
Threads Tree and Call Tree
You can start investigation with the Threads Tree view to see the full picture and understand which functions in which threads are executed and how many threads are spawned by your application. Another way is to start with the Call Tree view. In both views, you navigate from the first to the last function call just like your application does. The difference is that in Threads Tree function calls are considered within threads, and in Call Tree within the whole application process excluding the division into threads. All metrics are calculated accordingly.
This is the view that helps you not only review snapshot data, but also rearrange it in different ways. By default, you get a list of all functions sorted by total execution time. Using this view you can study how much time is spent in the function itself, how many times the current function is called. Functions can also be sorted by any of four metrics and by function name as well. It helps you find a function with the highest own time or a function with the greatest number of calls. Moreover, calls can optionally be grouped by Class or Namespace, enabling you to investigate problem classes and even namespaces.
If you want to focus on the most time-consuming functions, it's better to use the Hot Spots view. It represents a list of callback trees for each of 100 functions with the highest own time.
This view is available only if a function is opened in a new tab. It helps you trace the call chain that led to this particular function. If the function is called from different call sites, there will be several call chains.
After a performance issue is located, it's useful to view the source code and find out why a particular function is slow.