JetBrains Rider 2019.1 Help

Analyzing Profiling Results

When an application runs too slowly, it can be difficult to locate a problem and understand which action to take. Thus, the next step after profiling an application and getting a performance snapshot is opening the snapshot and analyzing data.

Typically, the final goal of any performance analysis is determining a particular method that causes performance issues. To help you perform this task, the Performance Profiler window offers two views: Call Tree and Top Methods.

Performance Profiler. Snapshot analysis

Top Methods

Top Methods shows the list of methods from all selected threads sorted by execution time. Use Top Methods to determine the slowest methods in particular parts of the Call Tree.

Top Methods is a counterpart of the Methods and Subsystems view it dotTrace standalone. For all topics on how to work with Top Methods, refer to the dotTrace documentation.

Call Tree

Call Tree shows method execution paths. Each method node in the tree represents a top-level method executed by a certain thread. The method node lists methods it called and metrics collected during profiling.

Call Tree is a counterpart of the Call Tree view it dotTrace standalone. For all topics on how to work with Call Tree, refer to the dotTrace documentation.

Filtering data in Timeline snapshots

Timeline snapshots have additional data on how the calls are distributed in time. This allows you to perform much more complex time interval analysis: for example, you can leave only the intervals where UI freezes took place, or time intervals with blocking GC, and so on. Note that the current version of dotTrace in Rider has limited Timeline support: currently, only filters by thread, thread state, method, and subsystem are available. To get the full support, open Timeline snapshots in a standalone version of dotTrace.

The filters that are currently applied to the opened snapshot are shown on the top of the Performance Profiler window. To remove all filters at once, click Reset.

To apply a filter by thread

  • By default, Call Tree shows you an aggregated tree containing all method calls from all threads: Threads: All. To apply a filter, select a thread in the list. After this, the Call Tree (and Top Methods as well) will show you methods only from the selected thread.

To apply a filter by thread state

  • The idea of the Thread State filter is to 'Select all time intervals where threads were in the specified state: either running or waiting'. To apply the filter, select a state in Thread State.

To apply a filter by method

  • Sometimes, you may want to focus on a particular method in the call tree. To do this, select the method in the Call Tree or Top Methods and in the context menu, choose Merge All Method Occurrences. After this, the selected method becomes the root node in Call Tree containing all the occurrences. All other calls are hidden.

To apply a filter by subsystem

  • The Subsystems filter allows you to quickly evaluate how time in a particular call tree is distributed among various components: user and system code, WPF, LINQ, File I/O, collections, and more. To apply the filter, select a subsystem in Subsystems. For more information on subsystems, follow this link.

Note that you can navigate not only from a snapshot to code, but also from code to the snapshot. The Search Everywhere command (Ctrl+T) allows searching for a method not only in code but also in opened performance snapshots. For this purpose, the resulting suggestions list contains the Snapshot category. After you select a method under this category, Rider will navigate you to the corresponding method occurrence in the Performance Profiler window.

Search Everywhere

The Navigate To feature also supports navigation to performance snapshots: in the code editor, place the caret on a method and press Alt+`, then select Show in Performance Snapshot.

Working with snapshots

All collected snapshots are shown on the All Snapshots tab of the Performance Profiler window. Here you can open snapshots for analysis, delete them, or save them in the .dtp (.dtt) format for exporting to other computers.

To open a snapshot

  1. (Optional) If you're interested only in the snapshots for the currently opened solution, in the All Snapshots tab, click Show snapshots from the solution.

  2. In the All Snapshots tab, select the desired snapshot.

  3. Do one of the following:

    • Double-click the snapshot.

    • In the context menu, select Open.

    This will open the snapshot in a separate tab in the Performance Profiler window.

To export a snapshot

  1. (Optional) If you're interested only in the snapshots for the currently opened solution, in the All Snapshots tab, click Show snapshots from the solution.

  2. In the All Snapshots tab, select the desired snapshot.

  3. In the context menu, select Export.

  4. Specify path and filename and click OK.

To open an exported snapshot

  1. In the All Snapshots tab, click Open snapshot.

  2. Specify path to the snapshot and click OK. The snapshot will be added to the All Snapshots list.

Last modified: 11 June 2019