其他
Rust 代码慢或需要性能优化时:先剖析/基准定位瓶颈…
适用于需要提升 Rust 程序性能、降低延迟/分配/内存占用或提高吞吐,并希望基于测量而非猜测进行优化的场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 39/100 ×0.15
适用场景
Rust 代码慢或需要性能优化时:先剖析特定
解决思路
- 优化前先问:瓶颈是什么,优化是否值得。
- 优化前先确认:是否已经测量,不要猜测。
- 优化前先确认:可接受的性能是什么。
- 优化前先确认:优化是否会增加复杂度。
- 对延迟要求,向 domain-* 询问可接受的响应时间。
- 对吞吐需求,向 domain-* 询问每秒请求数。
- 对内存约束,向 domain-* 询问内存预算。
- 向 domain-* 和业务要求追溯性能 SLA、延迟要求、可接受响应时间。
- 评估权衡:复杂度 vs 速度。
- 评估权衡:内存 vs CPU。
- 评估权衡:延迟 vs 吞吐。
- 先剖析,使用 flamegraph、perf。
- 先做基准测试,使用 criterion、cargo bench。
- 识别真实热点。
- 按优化优先级选择:算法选择(10x-1000x)。
- 按优化优先级选择:数据结构(2x-10x)。
- 按优化优先级选择:减少分配(2x-5x)。
- 按优化优先级选择:缓存优化(1.5x-3x)。
- 按优化优先级选择:SIMD/并行(2x-8x)。
- 减少分配:预分配、复用;使用 with_capacity、对象池。
- 改善缓存:使用连续数据;使用 Vec、SmallVec。
- 并行化:采用数据并行;使用 rayon、threads。
- 避免拷贝:实现零拷贝;使用引用、Cow<T>。
- 减少间接:使用内联数据;使用 smallvec、数组。
- 需要减少分配时:按 m01-ownership 使用引用、避免 clone。
- 需要减少分配时:按 m02-resource 使用 with_capacity 预分配。
- 需要并行化时:按 m07-concurrency 选择 rayon 或 threads。
- 需要并行化时:按 m07-concurrency 对 I/O 密集型考虑 async。
- 需要缓存效率时:数据布局优先 Vec 而不是 HashMap。
- 需要缓存效率时:访问模式优先顺序访问而不是随机访问。
- 用 cargo bench 做微基准测试。
- 用 criterion 做统计基准测试。
- 用 perf 或 flamegraph 做 CPU 剖析。
- 用 heaptrack 做分配跟踪。
- 用 valgrind 或 cachegrind 做缓存分析。
- 已知大小时,用 Vec::with_capacity(n) 预分配。
- 热路径中避免克隆,使用引用或 Cow<T>。
- 许多小操作时,先收集再处理以批处理操作。
- 数据通常较小时,使用 smallvec::SmallVec<[T; N]>。
- 固定大小数据时,用数组而不是 Vec 做内联缓冲区。
- 不要未剖析就优化;先剖析,避免优化错目标。
- 基准测试始终用 --release,不要在 debug 模式下做无意义基准。
- 不要用 LinkedList;优先用 Vec 或 VecDeque 以利用缓存。
- 避免隐藏的 .clone();用引用减少不必要分配。
- 不要过早优化;先让它工作。
- 避免为绕过生命周期而 clone;使用正确的所有权。
- 避免 Box 一切;尽可能放在栈上,减少间接成本。
- 小集合不要用 HashMap;用 Vec 加线性搜索减少开销。
- 避免循环中拼接 String;用 String::with_capacity 或 format!。
- 减少 clone 时参考 m01-ownership。
- 选择并发选项时参考 m07-concurrency。
- 选择智能指针时参考 m02-resource。
- 处理领域需求时参考 domain-*。
适用边界 · 注意事项
- 没有测量、剖析或基准数据时,不要开始优化。
- 功能尚未正确工作或尚未完成时,不要过早优化。
- 非 Rust 项目或没有 cargo/criterion/perf 等 Rust 工具链时,具体命令和类型不直接适用。