In a profiling session lasting only a few minutes, the profiled application may perform millions of operations. The following image shows that in less than two minutes, the program called three property assessors over 10 million times each.
You may have noticed something odd about these methods. Each belongs to types in the System namespace hierarchy. This is not application code; it belongs to the .NET Framework.
Both .NET Framework and third party types may be useful when researching memory and performance problems. On the other hand, they may make it more difficult to obtain relevant data. This is especially true when proactively analyzing an application to ensure its quality during the development cycle. JustTrace provides filtering options to fulfill both needs.
Filter .NET Framework Internals
JustTrace offers an important filter when beginning a new performance profiling session with the Tracing Profiler: Filter .NET Framework internals. Enabling this filter reduces the impact of the profiler on the application by a significant amount as JustTrace excludes internal calls within the .NET framework.
Turn this on for most scenarios. Turn the filter off when searching for issues inside the .NET Framework itself.
Clicking the ASSEMBLIES item in the left panel displays a view containing a list of assemblies loaded by the profiled process. A checked box indicates an application-specific assembly. An unchecked box indicates third party or .NET Framework assemblies.
This view is available in both performance and memory snapshots.
Just My Code
After selecting assemblies belonging to the MY CODE category, use the JUST MY CODE button to toggle between displaying methods belonging to the application and every method.
In tree views, such as the HOT SPOTS, this toggle operates on the selected node rather than the entire tree. It has four states.
Definitions for simplification:
- user call - a method in an assembly marked “My Code.”
- external call - a method in an assembly not marked “My Code.”
- on - button is selected
- off - button is not selected
- immediate children - nodes directly attached to the selected node according to the visible tree
- Enabled and on – the selected node is only displaying immediate user call children but has immediate external call children that are not displayed.
- Enabled and off – the selected node is displaying immediate external call children and user call children are attached or exist deeper in the tree.
- Disabled and on – the selected node only has immediate user call children.
- Disabled and off – the selected node only has immediate external call children and no other user call children are present
Clicking the JUST MY CODE button in the enabled and on state displays external calls in each descending tree path, stopping on the next user call.
The MINOR METHODS toggle on the ALL METHODS view makes the list display all methods when highlighted. When it is not, the list hides methods that consume only a small amount of execution time.
Since minor methods are unlikely to affect performance, hide them to focus on better optimization targets.
Group Minor Calls
GROUP MINOR CALLS is a multi-state toggle, similar to the JUST MY CODE button, found on views in the CALL TREES category. When highlighted, this toggle makes the selected node hide immediate children with minute execution time. Unlike the JUST MY CODE toggle, the node displays a grouping child node with aggregate details on the minor calls.
This button has only one state for disabled, indicating that the selected node lacks immediate minor call children.
Just My Types
The BY TYPE and INCOMING REFERENCES BY TYPE views for memory snapshots contain a corollary to the JUST MY CODE toggle: JUST MY TYPES. This button toggles between all types and types belonging to the assemblies selected in the ASSEMBLIES view.
The Common Language Runtime manages object lifetimes, and instances are marked in various stages of garbage collection. The BY TYPE view includes generational filtering, only displaying instances in the selected stage of collection. The options are All Generations, Generation 0, Generation 1, Generation 2, and the Large Object Heap.
Select this filter using the dropdown as shown in the screenshot.
Profiling .NET applications for performance
or memory management issues
generates a vast amount of data. Filtering this data makes it easier to isolate issues and ultimately create a solution. This article described various filters you can use when analyzing JustTrace
Would you like to see other filters included in JustTrace? Please visit the JustTrace Feedback Portal
to vote on other’s suggestions and let us know what you would like in future editions of JustTrace.
Chris understands that ‘external calls’ typically refers to interop or non-.NET operations, but he thought ‘third-party calls’ sounded odd when frequently used.