XPerf
LanguagesDart

Dart performance guide (v0)

Fewer list resizes, fewer string + temporaries, quieter hot loops.

Scope: Dart 3.x (VM / Flutter). Speedup claims cite a local bench, an upstream source, or are marked provisional. Corpus residual counts are lint hit counts, not wall-time savings.

Profile first (benchmark_harness, DevTools CPU profiler). Treat chapters as checklists, not rewrite mandates.

Contents

1. Lists

List.add in a hot loop is fine when capacity growth amortizes, but allocating a fresh growable list every iteration is not. Prefer List.filled / List.generate / known length when possible.

Lint: dt-list-add-empty (default off); dt-growable-add-empty (empty growable list + add in a size-hinted loop; default hint).

2. Strings and hot I/O

s = s + x in a loop builds many strings. Prefer StringBuffer. Keep print out of tight loops.

Lint: dt-string-plus-hot, dt-print-hot (default off).

Lint map

IDSmellDefault
dt-list-add-emptyList grow / add without capacity cueoff
dt-string-plus-hotstring + in loopoff
dt-print-hotprint in loopoff
dt-growable-add-emptyempty growable list + add in size-hinted loophint

Escalate only with evidence/<rule>.jsonl — see evidence-policy.md.

References