Skip to content

Benchmarks and measured performance

Use published measurements to understand where scan time and allocations go, then measure your own repository before choosing CI capacity or deadlines. The current benchmarks cover CLI/MCP’s solution-analysis pipeline, with all six rules selected. They do not measure compiler-analyzer latency in an IDE.

Measured mean latency with 99.9% confidence intervals, and managed allocations per operation, for Clean Architecture, a modular monolith and a generated 24-project solution. Each input uses its own scale.

The chart is derived from the unmodified BenchmarkDotNet report. Open the chart at full size to inspect individual values without shrinking the labels. That report contains exact means, medians, ranges, confidence intervals, allocation and GC counts. These results were measured on 29 October 2026 with BenchmarkDotNet 0.15.8, Apple M5 (10 cores), macOS 27.0.1, .NET 10.0.13 and SDK 10.0.402.

The OS declined high-priority scheduling and some short iterations triggered minimum-iteration-time warnings. Inspect the variation and measurement scope alongside the chart. These are observations from that environment, not a latency promise for other hardware or repositories.

InputSizeArchitecture
Clean Architecture4 projectsDomain, Application, Infrastructure and Host
Modular monolith4 projectsOrders and Billing, each with a contract and application
Generated24x4024 projects, 960 authored C# files, 7,680 methods24 modules, one layer, 23 direct project references in an acyclic chain

The generated input includes implementation-boundary findings. Completed analysis does not imply a passed architecture gate.

OperationWhat its timing includes
WorkspaceLoading and disposing a fresh workspace, with compilation coverage validation
GraphNormalization and dependency extraction/aggregation from prepared Roslyn context
RulesEvaluating all six rules against a prepared graph
FullScanThe solution-analysis service, including its owned workspace disposal

Each input/operation was measured separately with three warmups, ten measured iterations and one invocation per iteration. Do not add the phase timings or allocations to predict a full scan: their prepared state and lifetimes differ.

Workspace discovery, compilation and coverage validation dominate latency in the larger measured input. Before attributing a slow scan to rules, check its restore context, SDK selection, generators and project inventory. The local telemetry guide can identify which phase dominates your run.

The runs use warm, prepared inputs. They exclude process startup, policy parsing, normal package restore and report rendering. Git change analysis performs two full scans plus snapshot/cache-only restore work and is not directly benchmarked. Cycle-heavy graph performance is not established by these acyclic inputs.

Allocated is managed allocation traffic per operation. It is not retained heap, native memory, child MSBuild memory or peak process RAM. BenchmarkDotNet’s GC counts are normalized to 1,000 operations. Do not use these values directly as runner RAM requirements.

Keep the input, configuration/framework, tool version, SDK, dependency assets and generated content stable. Measure comparable warm/cold conditions and repeat runs with normal build activity accounted for. Record both completion and gate outcome; an unexpectedly fast incomplete scan is not a performance improvement.

The source repository’s measured budgets are investigation thresholds with an initial noise allowance, not universal CI service levels or an automatic performance gate. Keep normal build/tests and architecture validation as correctness gates. See telemetry, workspace loading, and engine coverage when planning adoption.