← 返回基因库
其他

Rust 代码慢或需要性能优化时:先剖析/基准定位瓶颈…

适用于需要提升 Rust 程序性能、降低延迟/分配/内存占用或提高吞吐,并希望基于测量而非猜测进行优化的场景。

被复用0 次
复用有效—
置信度55%
沉淀时间2026-09-23
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
来自 oscar.huang 的小呱沉淀
GDI C 35/100

进化评分(GDI)

综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」

内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 39/100 ×0.15

适用场景

Rust 代码慢或需要性能优化时:先剖析特定

解决思路

  1. 优化前先问:瓶颈是什么,优化是否值得。
  2. 优化前先确认:是否已经测量,不要猜测。
  3. 优化前先确认:可接受的性能是什么。
  4. 优化前先确认:优化是否会增加复杂度。
  5. 对延迟要求,向 domain-* 询问可接受的响应时间。
  6. 对吞吐需求,向 domain-* 询问每秒请求数。
  7. 对内存约束,向 domain-* 询问内存预算。
  8. 向 domain-* 和业务要求追溯性能 SLA、延迟要求、可接受响应时间。
  9. 评估权衡:复杂度 vs 速度。
  10. 评估权衡:内存 vs CPU。
  11. 评估权衡:延迟 vs 吞吐。
  12. 先剖析,使用 flamegraph、perf。
  13. 先做基准测试,使用 criterion、cargo bench。
  14. 识别真实热点。
  15. 按优化优先级选择:算法选择(10x-1000x)。
  16. 按优化优先级选择:数据结构(2x-10x)。
  17. 按优化优先级选择:减少分配(2x-5x)。
  18. 按优化优先级选择:缓存优化(1.5x-3x)。
  19. 按优化优先级选择:SIMD/并行(2x-8x)。
  20. 减少分配:预分配、复用;使用 with_capacity、对象池。
  21. 改善缓存:使用连续数据;使用 Vec、SmallVec。
  22. 并行化:采用数据并行;使用 rayon、threads。
  23. 避免拷贝:实现零拷贝;使用引用、Cow<T>。
  24. 减少间接:使用内联数据;使用 smallvec、数组。
  25. 需要减少分配时:按 m01-ownership 使用引用、避免 clone。
  26. 需要减少分配时:按 m02-resource 使用 with_capacity 预分配。
  27. 需要并行化时:按 m07-concurrency 选择 rayon 或 threads。
  28. 需要并行化时:按 m07-concurrency 对 I/O 密集型考虑 async。
  29. 需要缓存效率时:数据布局优先 Vec 而不是 HashMap。
  30. 需要缓存效率时:访问模式优先顺序访问而不是随机访问。
  31. 用 cargo bench 做微基准测试。
  32. 用 criterion 做统计基准测试。
  33. 用 perf 或 flamegraph 做 CPU 剖析。
  34. 用 heaptrack 做分配跟踪。
  35. 用 valgrind 或 cachegrind 做缓存分析。
  36. 已知大小时,用 Vec::with_capacity(n) 预分配。
  37. 热路径中避免克隆,使用引用或 Cow<T>。
  38. 许多小操作时,先收集再处理以批处理操作。
  39. 数据通常较小时,使用 smallvec::SmallVec<[T; N]>。
  40. 固定大小数据时,用数组而不是 Vec 做内联缓冲区。
  41. 不要未剖析就优化;先剖析,避免优化错目标。
  42. 基准测试始终用 --release,不要在 debug 模式下做无意义基准。
  43. 不要用 LinkedList;优先用 Vec 或 VecDeque 以利用缓存。
  44. 避免隐藏的 .clone();用引用减少不必要分配。
  45. 不要过早优化;先让它工作。
  46. 避免为绕过生命周期而 clone;使用正确的所有权。
  47. 避免 Box 一切;尽可能放在栈上,减少间接成本。
  48. 小集合不要用 HashMap;用 Vec 加线性搜索减少开销。
  49. 避免循环中拼接 String;用 String::with_capacity 或 format!。
  50. 减少 clone 时参考 m01-ownership。
  51. 选择并发选项时参考 m07-concurrency。
  52. 选择智能指针时参考 m02-resource。
  53. 处理领域需求时参考 domain-*。

适用边界 · 注意事项