The first thing you see in dotTrace Performance Viewer is the Overview page. This page contains general performance information: the list of hotspots (calls with the highest own time), snapshot options, and more.
Starting dotTrace Performance 5.5, the page also contains the list of subsystems shown against the app's threads. This list contains subsystems from the Default profile – a set of subsystems that comes with dotTrace Performance out of the box. The Default profile includes all major .NET Framework subsystems, such as WinForms and WPF, Collections, LINQ etc.
As you can see, even before going outside of the defaults, subsystems help us understand main performance hot spots. For example, just a quick glance on the default profile shows that our app works with Collections a lot.
Let’s look at subsystems in the Default profile in more detail. To do this, we switch dotTrace Performance to the Threads Tree view.
Note that subsystems are shown specifically for a call or thread selected in the call tree. Thus, if Main Thread is selected, dotTrace Performance Viewer shows the time consumed by a certain subsystem out of all calls performed by the app. For example, the WinForms subsystem has taken 1894 ms - this includes the time of all calls in the
Subsystems are presented in two ways:
- Block view is the bar that shows the contribution of each subsystem graphically. This view is perfectly suited for quick evaluation of an app’s performance hot spots.
- List view. This view is intended for more detailed investigation of activities per subsystem as it allows you to drill down to the list of calls in each subsystem.
For most apps, using the Default profile is enough, and all you might additionally need is to extend it with subsystems better suited for the specifics of your app.
Creating your own profile usually only makes sense in really complex scenarios when you want to look at your methods from different perspectives (in other words, when a certain method can be related to more than one subsystem).
Nevertheless, for better understanding of subsystems, let's create a new blank profile. This profile will include subsystems that highlight the details of interacting with SQL Server and drawing the chart (all these calls are now calculated within other subsystems like WinForms, System code, or User code).