跳转至

性能优化

  1. 使用合适的数据结构和算法:选择合适的数据结构和算法可以明显地提高代码的性能,比如使用哈希表、二分查找等。
  2. 减小循环迭代次数:减少循环次数可以有效地减少程序执行时间。前置条件可以使用缓存等方式来减少运算次数。
  3. 将常用的计算结果预存起来:如果某个计算的结果需要频繁使用,可以将结果预先存到变量中,避免重复计算,这样可以显著提高程序的效率;
  4. 避免不必要的内存分配:在回收机制不发达的语言中,内存分配与回收会成为程序性能的一个瓶颈,尤其是在循环中分配内存,要尽可能地避免。
  5. 代码重构:重构代码,消除重复的部分,提取公共方法,这样可以使代码更简洁、可读性更好,并且可以减少代码执行所花费的时间。
  6. 缓存:对于频繁使用的计算结果,可以采用缓存技术以减少相同的计算,从而优化性能。
  7. 多线程:多线程并发执行可以减少程序单线程执行时的时间。如果有大量耗时任务可以考虑采用多线程。
  8. 调试:通过调试程序,及时找出性能瓶颈,针对性进行优化,可以大大提高代码性能。
  9. 利用硬件特性:利用处理器、内存等硬件资源的特点和优势,可以优化代码性能,比如利用 SIMD 指令集等。

1 准则

  • 使用更好的编译器,打开编译选项
  • 使用最优算法
  • 使用更好的库并用好库
  • 减少内存分配
  • 减少复制
  • 移除计算
  • 使用最优数据结构
  • 提高并发
  • 优化内存管理

1.1 减少上下文切换

1.2 减少内存拷贝

1.3 优化热点代码

2 缓存

  1. 数据缓存
  2. 数据预读

3 内存

  1. 字节对齐(利用 cpu 缓存行,避免跨缓存行,而多读一次内存)
  2. 结构体成员布局(合理布局可减少一个结构体内存占用)
  3. 减少内存重新分配。如容器存储空间不够后,会重新分配当前内存空间的 2 倍内存,然后将旧数据拷贝到新数据的内存空间中。

4 锁

  1. 合理选择互斥锁、读写锁、自旋锁
  2. 尽量避免锁(使用线程独占数据)
  3. 无锁编程(使用原子型数据结构 CAS)

5 线程

  1. 避免惊群。
  2. 减少竞争。视情况增加额外内存,降低锁竞争。
  3. 绑定 cpu 核心。

6 代码结构

  1. 使用静态成员函数取代成员函数。
  2. 移除未使用的多态性。