Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use the open-source free `Asynkron.Profiler` dotnet tool for CLI-first CPU, allocation, exception, contention, and heap profiling of .NET commands or existing trace artifacts. USE FOR: Asynkron.Profiler setup; automation-friendly profiling output; CPU, allocation, exception, contention, and heap investigation. DO NOT USE FOR: unrelated stacks; generic tasks that do not need this specific guidance. INVOKES: inspect the repository context, edit targeted files, and run relevant build, test, lint, o
.claude/skills/managedcode-asynkron-profiler/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -2% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 0% | 0% |
Asynkron.Profiler or asynkron-profiler.nettrace, .speedscope.json, .etlx, or .gcdump file into a readable reportRelease output over dotnet run so the trace represents the target app rather than restore/build noise.asynkron-profilerdotnet-tracedotnet-gcdump--cpu--memory--exception--contention--heap--input <path> when the trace already exists and the task is about rendering or narrowing the report, not recollecting data.--root <text> to anchor the call tree--filter <text> to trim tables--exception-type <text> for exception-heavy flows--calltree-depth, --calltree-width, --calltree-self, --calltree-sibling-cutoffprofile-output/ as the stable output folder for review artifacts and reruns.profiling.mermaidflowchart LR A["Profiling task"] --> B{"New run or existing artifact?"} B -->|New run| C["Build target in Release"] C --> D["Run `asynkron-profiler --mode -- <command|csproj|sln>`"] D --> E["Collect via `dotnet-trace` or `dotnet-gcdump`"] E --> F["Write reports to `profile-output/`"] B -->|Existing artifact| G["Run `asynkron-profiler --input <path> [--mode]`"] G --> F F --> H["Refine output with `--root`, `--filter`, and call tree flags"]
bashdotnet tool install -g asynkron-profiler --prerelease
bashdotnet tool install -g dotnet-trace dotnet tool install -g dotnet-gcdump
bashasynkron-profiler --help dotnet-trace --version dotnet-gcdump --version
bashdotnet build -c Release asynkron-profiler --cpu -- ./bin/Release/<tfm>/MyApp
Framework-dependent apps can run through dotnet:
bashasynkron-profiler --memory -- dotnet ./bin/Release/<tfm>/MyApp.dll
Project and solution paths are also valid when the tool should build and run for you:
bashasynkron-profiler --contention -- ./MyApp.csproj asynkron-profiler --exception -- ./MySolution.sln
bashasynkron-profiler --input ./profile-output/app.nettrace --cpu asynkron-profiler --input ./profile-output/app.etlx --memory asynkron-profiler --input ./profile-output/app.gcdump --heap
Manual collection with the official tools still fits when the trace must be captured separately:
bashdotnet-trace collect --output ./profile-output/app.nettrace -- dotnet run MyProject.sln asynkron-profiler --input ./profile-output/app.nettrace --cpu
--cpu for sampled hotspots--memory for GC allocation ticks and per-type call trees--exception for thrown counts and throw-site trees--contention for wait-time trees--heap for retained heap shape via dotnet-gcdump--root <text> to focus the tree on a subsystem--filter <text> to narrow function tables--exception-type <text> when one exception dominates the signal--calltree-depth <n>--calltree-width <n>--calltree-self--calltree-sibling-cutoff <n>--input <path> for .nettrace, .speedscope.json, .etlx, or .gcdump--tfm <tfm> when the profiler must resolve a specific target framework from a .csproj or .sln.NET SDK 10.x as the supported toolchain baselinedotnet run is supported but usually produces noisy traces because it captures host, restore, and build workdotnet-trace and dotnet-gcdump, so missing prerequisites or blocked diagnostics IPC will break runs--heap captures retained heap shape, not CPU or allocation timelinesprofilingasynkron-profiler command path for the profiling mode that matches the problem--root, --filter, --exception-type, or call-tree options needed for readable outputasynkron-profiler --help, dotnet-trace --version, and dotnet-gcdump --version all succeedRelease output unless there is a documented reason to accept dotnet run noiseprofile-output/ contains the expected report or artifact after the runOther measured skills in the registry, with their headline benchmark lift.