- System requirements
- Profiler architecture
- Running the profiler
- Profiler activation
- Start profiling
- Capturing snapshots
- Solving performance problems
- CPU profiling
- Threads
- Memory profiling
- Memory telemetry
- Object allocation recording
- Shallow and retained sizes
- Memory views
- Objects view
- Class list
- Class and namespace
- Domains and modules
- Object generations
- Shallow size
- Object explorer
- Biggest objects (dominators)
- Allocations
- Merged paths
- Class hierarchy
- Method merged callees view
- Method back traces view
- Quick info view
- GC roots view
- Leak detection: working with paths
- Memory inspections
- Comparing memory snapshots
- Values of primitive types
- Useful actions
- Garbage collection
- Exception profiling
- Probes: monitor higher level events
- Performance Charts
- Inspections: automatic recognition of typical problems
- Automatically trigger actions on event
- Summary, snapshot annotation, automatic deobfuscation
- Time measurement (CPU time, wall time)
- Filters
- Snapshot directory customization
- Export of profiling results to HTML, CSV, XML, plain text
- Profiler API
- Profiler HTTP API
- Command line tool to control profiling
- Settings
Object explorer
This simple view allows to traverse outgoing and incoming object references. This is not useful for memory leak detection, but this is powerful tool to examine values of object's fields, as you do in a debugger. To find memory leaks, use paths to GC roots.
Outgoing references
Shows all objects of the set and allows you to browse their outgoing references. Outgoing references of an object are fields or array elements of that object that point to other objects.

Incoming references
Shows all objects of the set and allows you to browse their incoming references. Incoming references of an object are references to that object.
Do not use Incoming references to find out why an object is retained in memory. Use paths, which is specially designed for this purpose.

Class-specific object presentation
In Object explorer values are immediately shown for object instances of common classes, so the most useful information is inlined, saving time expanding and searching for the specific field. Profiler has special presentation for the following classes:
System.Boolean
System.Byte
System.Char
System.Collections.ArrayList/ReadOnlyArrayList
System.Collections.ArrayList/SyncArrayList
System.Collections.ArrayList
System.Collections.BitArray
System.Collections.Concurrent.BlockingCollection
System.Collections.Concurrent.ConcurrentBag
System.Collections.Concurrent.ConcurrentDictionary/Node
System.Collections.Concurrent.ConcurrentDictionary
System.Collections.Concurrent.ConcurrentQueue
System.Collections.Concurrent.ConcurrentStack
System.Collections.Generic.HashSet
System.Collections.Generic.KeyValuePair
System.Collections.Generic.LinkedList
System.Collections.Generic.List
System.Collections.Generic.PriorityQueue
System.Collections.Generic.Queue
System.Collections.Generic.SortedDictionary
System.Collections.Generic.SortedList
System.Collections.Generic.SortedSet
System.Collections.Generic.Stack
System.Collections.Generic.TreeSet
System.Collections.Hashtable/SyncHashtable
System.Collections.Hashtable/bucket
System.Collections.Hashtable
System.Collections.Immutable.ImmutableArray
System.Collections.ObjectModel.ReadOnlyCollection
System.Collections.Queue/SynchronizedQueue
System.Collections.Queue
System.Collections.SortedList/SyncSortedList
System.Collections.SortedList
System.Collections.Stack/SyncStack
System.Collections.Stack
System.DateTime
System.Decimal
System.Double
System.Drawing.Color
System.Enum
System.Guid
System.Half
System.IO.FileStream
System.Int16
System.Int32
System.Int64
System.SByte
System.Single
System.Threading.Thread
System.UInt16
System.UInt32
System.UInt64
System.Uri
System.ValueType