Working with the call tree
Published 11 June 2013
The call tree shows the stack traces that were executed by your application during the time period you selected. By default, stack traces are displayed top-down (calling method above called method). To switch the call tree to bottom-up view, on the View menu, click Bottom up.
The "hottest" stack trace (the one that took the most time to run) is displayed at the top of the call tree, and is automatically expanded. If a method was called in several contexts, it is displayed once in each context in the call tree.
For more information on how to use the call tree effectively, see Tips on using the call tree.
Reading the call tree
The following data is shown for each method in the stack trace, for the selected time period:
- Time: the total execution time for the method within this stack trace.
- Time With Children: the total execution time for the method and all its children within this stack trace.
- Hit Count: the number of times the call was made within this stack trace.
When time is shown as a percentage, the Time (%) for each method shows the proportion of the total execution time that the method contributed during the selected period. The total percentage for all methods can sum to over 100 on machines using multiple CPU cores.
SQL calls
Database call data is only available in ANTS Performance Profiler Professional edition.
To see information about time taken by SQL calls, switch the Timing options to Wall-clock time.
SQL calls made by the application are shown within the stack trace, with the following information:
- Time: The time until the first result for the query was returned.
The time it took the call to execute on the server isn't recorded. This means that no time data is available for SQL calls in CPU time mode. - Time With Children: The total execution time for the call and all its children within this stack trace.
- Hit Count: The number of times the query was called within this stack trace.
HTTP calls
HTTP request data is only available in ANTS Performance Profiler Professional edition.
To see information about time taken by HTTP requests, switch the Timing options to Wall-clock time.
If your application is an ASP.NET site, you will also see incoming HTTP requests your application received, and outgoing HTTP requests your application made, in the call tree, with the following information:
- Time: The time taken to execute the .NET helper method(s) that ran the request.
- Time With Children: The total execution time for the request and all the .NET methods executed because it was made.
- Hit Count: The number of times the request was called within this stack trace.
To collapse all nodes except HTTP requests, right-click anywhere in the call tree and select Show only incoming HTTP calls. SQL calls will also be shown.
Call tree icons
Each tree item is shown with one or more of the following icons:
Root method or leaf method. Root methods are not called by any other method; leaf methods do not call any other method. | |
Indicates call flow when the call tree direction is top-down (calling method above called method). | |
Indicates call flow when the call tree direction is bottom-up (called method above calling method). | |
Indicates one or more collapsed methods that can be expanded. | |
Indicates one or more collapsed methods that cannot be expanded (because they are all leaf nodes that have been filtered out of the current view; see Filtering the call tree). | |
Method is part of the hottest (longest running) stack trace. Used instead of the root/leaf or call-flow icons. | |
Indicates a SQL call generated by the parent .NET method. | |
Indicates an HTTP request from the client: the .NET methods listed as children of this item were called when this HTTP request was made. | |
Indicates an outgoing HTTP request. The icon shows the HTTP verb used for the request (for example, 'GET' for GET requests, or 'POST' for POST requests). |
Methods listed in bold have source code available. To display the method's source code, click any bold method. Line-level timings are also available in the source code pane if you use one of the Line-level and method-level timings; all methods inc. framework or Line-level and method-level timings; only methods with source profiling modes.
You may also see the following items in the call tree. These are shown in bold orange text, and represent time spent in your application that is in addition to time spent executing specific methods:
- Waiting for synchronization: A thread was waiting. For example, if you have called the
Monitor.Wait
method, the thread will wait for synchronization until the lock is reacquired. Another cause is that the finalizer thread spends most of its time waiting. Expand the call graph to see what caused the wait. Items that are Waiting for synchronization only contribute to timings in the call tree when the Timing display option is set to Wall-clock time. To exclude time due to Waiting for synchronization items, from the Timing Options dropdown, select CPU time. - Thread blocked: The executing thread was blocked. For example, the thread may have been sleeping, or waiting for access to a shared resource. Thread blocked items only contribute to timings in the call tree when the Timing display option is set to Wall-clock time. To exclude time due to Thread blocked items, from the Timing Options dropdown, select CPU time. The call tree display options are described below.
- Waiting for I/O to complete: The executing thread was blocked waiting for file I/O. Waiting for I/O to complete items only contribute to timings in the call tree when the Timing display option is set to Wall-clock time. To exclude time due to Waiting for I/O to complete items, from the Timing Options dropdown, select CPU time. The call tree display options are described below.
- Transition to unmanaged code: A transition from managed code to unmanaged code occurred at this point in the stack trace. In general, line-level and method-level timings are not available for the unmanaged code. However, for unmanaged methods that are declared with
extern
within managed code, method-level timings are available. - Transition to managed code: A transition from unmanaged code to managed code occurred at this point in the stack trace.
- JIT overhead: JIT compilation occurred at this point in the stack trace during execution of your application. The method that needed to perform the compilation is shown as the parent of a JIT overhead item.
- Profiler overhead: Additional overhead introduced by ANTS Performance Profiler. This is unlikely to be seen when the option to adjust timings to compensate for overhead added by the profiler is enabled.
- Assembly load or unload: A .NET assembly was loaded or unloaded.
- Module load or unload: A .NET module was loaded or unloaded.
To create a new call graph based on a particular method, select the method in the call tree, and click in the Method column.
To view a SQL query in Database Calls view, select the method in the call tree, and click in the Method column.