XPerf
语言Dart

Dart 性能指南(v0)

少做 list 扩容,少产生字符串 + 临时对象,让热循环更安静。

范围:Dart 3.x(VM / Flutter)。 加速数字会标明本地 bench、上游来源,或标为暂定。语料库残留计数是 lint 命中次数,不是墙钟耗时节省。

先画像(benchmark_harness、DevTools CPU profiler)。各章是核对清单,不是强制重写令。

目录

1. List

热循环里的 List.add 在容量摊销时可以接受,但每次迭代新建可增长 list 不行。尽可能用 List.filled / List.generate / 已知长度。

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

2. 字符串与热 I/O

循环里的 s = s + x 会造出许多字符串。优先 StringBuffer。不要把 print 放进紧密循环。

Lint: dt-string-plus-hot, dt-print-hot(默认 off)

Lint 对照

IDSmell默认
dt-list-add-emptyList 增长 / 无容量线索的 addoff
dt-string-plus-hot循环内字符串 +off
dt-print-hot循环内 printoff
dt-growable-add-empty空可增长 list + 有大小提示循环里的 addhint

仅在有 evidence/<rule>.jsonl 时升级——见 evidence-policy.md。

参考资料