Profile applications
Regardless of what application type you're going to profile, the workflow always looks the same:
Decide which profiling configuration you will use.
Run a profiling session
In the window header, select the run configuration you want to profile.
In the run widget menu, choose Profile with, then choose a profiling configuration:
either one of the predefined configurations: Memory (Sampled allocations), Memory (Full allocations).
or your own custom configuration.
Once the profiling is started, Rider will open an Analysis editor document with the profiling controller inside.
Reproduce the issue you're looking for or, if you just want to evaluate the memory usage, go through the desired usage scenarios in your application.
Use the Get Snapshot button to take one or more memory snapshots (for example, before and after a particular activity in your application). If you want to analyze only memory allocation, you can take no snapshots at all.
You can also use the Get Snapshot by Condition button to set up getting snapshots on a specific condition.
After you collect the data, you can finish the profiling session. Normally, you do it either by closing the profiled application or by detaching the profiler via the Detach button ( Kill forcibly terminates the profiled application and the session, so, use it only in emergency cases).
dotMemory saves the data collected during a profiling session to a workspace. This includes memory allocation data and memory snapshots.
About profiling configurations
Before starting a profiling session, you must decide which profiling configuration you will use. Typically, you decide between
a predefined configuration: Memory (Sampled allocations) or Memory (Full allocations).
or your own custom configuration.
The profiling configuration specifies profiling session settings like which allocation data must be collected, whether child processes must be profiled, and so on.
The profiling target is always an executable* which is specified in the currently selected run configuration.
Currently, you're able to profile the following run configuration types:
macOS (only on macOS and only for the
net7.0-macos
andnet8.0-macos
target frameworks)
If you select a run configuration of some other type, this will disable the profiling controls on the toolbar.
Create a custom profiling configuration
From the menu bar, choose Run | Switch Profiling Configuration | Edit Configurations.
In the opened Profiling Configurations window, click to add a new profiling configuration.
In the list, select a data collection mode: either Memory (Sampled allocations), or Memory (Full allocations). Learn more about the modes.
Specify configuration Name and other profiling options:
- Control profiling manually
Enables you to control profiling manually via the profiler controls.
- Control profiling via API
Enables you to control profiling directly from the code of the profiled application. Learn more about using the API in the dotMemory documentation.
- Profile child processes
If selected, dotMemory will profile not only the main app process but the processes it runs as well.
Profiling controls
Get Snapshot | Gets a memory snapshot for the process selected in the list of processes . The snapshot is added to the collected snapshot area . Getting a snapshot doesn't interrupt the profiling process, allowing you to get another snapshot (which, for example, can be compared with the first one later). After you finish capturing snapshots, you can proceed to analyzing profiling results. |
Get Snapshot on Condition | Opens the Get Snapshot on Condition window. Using this window, you can configure dotMemory to automatically get snapshots when a particular condition is triggered. |
Full allocation data | Off (default): the profiler collects sampled data on memory allocation calls with approximate size of allocated objects. This mode doesn't affect application performance. Time intervals with sampled data are marked with a dotted green line on the timeline graph On: the profiler collects detailed data on calls that allocate memory, including the exact size and number of allocated objects. This mode significantly slows down the profiled application. Time intervals with full data are marked with a green line on the timeline graph |
Force GC | Forces full garbage collection in the application. |
Detach | Detaches the profiler from the application but keeps the application running. The Detach operation is available only in case you attach the profiler to an already running app. |
Kill | Kills the currently selected process of the application. Use Kill with caution: the unconditional termination of a process may lead to loss of data your app works with. Typically, you should close profiled apps normally. |
Kill All | Kills all processes of the application. The list of processes and the Kill All button are shown only in case you profile the app running multiple processes. |
Get snapshots on condition
Sometimes you may be interested in taking snapshots only when a certain condition takes place. The most popular case is taking a snapshot when the memory consumption of your application is dramatically increased. As doing this manually (using the Get Snapshot button) is quite tricky, dotMemory allows you to automate this process. All you need is to set a particular condition, and snapshots will be collected automatically after the condition takes place. Currently, the following conditions are supported:
Memory consumption increase in MB.
Memory consumption increase in %.
Period of time in minutes (periodical taking of snapshots).
To enable collecting snapshots on condition
After the profiling session is started, click the Get Snapshot by Condition button in .
Select desired conditions in the Automatically get a snapshot section and specify particular values for them:
if memory consumption increases by [X] MB – automatically get a snapshot when memory consumption* exceeds the baseline by X MB. The first baseline is memory consumption at the moment when you click the Start button in the Get Snapshot by Condition window. After the condition takes place, dotMemory gets a snapshot, and the memory consumption at that moment becomes a new baseline.
if memory consumption increases by [X] % – automatically get a snapshot when memory consumption exceeds the baseline by X percent. The first baseline is memory consumption at the moment when you click the Start button in the Get Snapshot by Condition window. After the condition takes place, dotMemory gets a snapshot, and the memory consumption at that moment becomes a new baseline.
if memory consumption exceeds [X] MB – automatically get a snapshot when total memory consumption (absolute value) exceeds X MB.
every [X] minutes – automatically get a snapshot every X minutes.
Select the Limit the max number of snapshots to [X] checkbox if you want dotMemory to take no more than X snapshots. This option can be useful if you're limited on the disk space.
Click Start.
To disable collecting snapshots on condition
Click the Get Snapshot by Condition button in .
Click Stop.