性能优化
- 使用合适的数据结构和算法:选择合适的数据结构和算法可以明显地提高代码的性能,比如使用哈希表、二分查找等。
- 减小循环迭代次数:减少循环次数可以有效地减少程序执行时间。前置条件可以使用缓存等方式来减少运算次数。
- 将常用的计算结果预存起来:如果某个计算的结果需要频繁使用,可以将结果预先存到变量中,避免重复计算,这样可以显著提高程序的效率;
- 避免不必要的内存分配:在回收机制不发达的语言中,内存分配与回收会成为程序性能的一个瓶颈,尤其是在循环中分配内存,要尽可能地避免。
- 代码重构:重构代码,消除重复的部分,提取公共方法,这样可以使代码更简洁、可读性更好,并且可以减少代码执行所花费的时间。
- 缓存:对于频繁使用的计算结果,可以采用缓存技术以减少相同的计算,从而优化性能。
- 多线程:多线程并发执行可以减少程序单线程执行时的时间。如果有大量耗时任务可以考虑采用多线程。
- 调试:通过调试程序,及时找出性能瓶颈,针对性进行优化,可以大大提高代码性能。
- 利用硬件特性:利用处理器、内存等硬件资源的特点和优势,可以优化代码性能,比如利用 SIMD 指令集等。
1 准则
- 使用更好的编译器,打开编译选项
- 使用最优算法
- 使用更好的库并用好库
- 减少内存分配
- 减少复制
- 移除计算
- 使用最优数据结构
- 提高并发
- 优化内存管理
1.1 减少上下文切换
1.2 减少内存拷贝
1.3 优化热点代码
2 缓存
- 数据缓存
- 数据预读
3 内存
- 字节对齐(利用 cpu 缓存行,避免跨缓存行,而多读一次内存)
- 结构体成员布局(合理布局可减少一个结构体内存占用)
- 减少内存重新分配。如容器存储空间不够后,会重新分配当前内存空间的 2 倍内存,然后将旧数据拷贝到新数据的内存空间中。
4 锁
- 合理选择互斥锁、读写锁、自旋锁
- 尽量避免锁(使用线程独占数据)
- 无锁编程(使用原子型数据结构 CAS)
5 线程
- 避免惊群。
- 减少竞争。视情况增加额外内存,降低锁竞争。
- 绑定 cpu 核心。
6 代码结构
- 使用静态成员函数取代成员函数。
- 移除未使用的多态性。