【读书笔记】代码大全26章:代码优化技术
2014-04-26 21:27
288 查看
代码优化其实就是反向重构
逻辑优化
当你知道答案后就不要再继续判断了(C++,Java)
将判定列表按顺序排列(VB+7%)
不要盲目听从优化建议
将case转换成if-then-else(C#,Java,VB)
比较类似的逻辑结构(case和if-then-else)
Java适合if-then-else
C# VB适合case
将复杂的表达式替换成简单的查表(C++,VB)
循环优化
将if移到for循环之外(C++,Java,VB)
将两个条件相同的for循环合并成一个for循环(C++,PHP)
将for循环的步长改为2,再重复一遍循环体(C++,Java,PHP,Python)
尽量减少for循环中的运算,重复的运算提到循环外(C++,C#,Java)
哨兵变量,适合线性查找算法(C#,Java,VB)
如果有多个循环,将循环次数最多的循环放在最里面(C++,Java,PHP)
数据变换
使用循环变量要使用整数而不是浮点数(C++,PHP,VB)
尽量减少数组的维度,可以将二维数组转换成一维数组进行处理(C++,C#,Java,PHP,Python,VB)
使用额外索引(动态规划)
操作索引编号而不是整个数据
使用缓存(C++,Java,Python,VB)
表达式优化
推导等价表达式
!a&&!b => !(a||b)
sqrt(x)<sqrt(y) => x<y (C++,VB,Python)
减少运算量
乘法转换成加法
指数转换成乘法
充分利用三角函数的变换
long long转换成long或int
浮点数转换成定点数或整数
双精度转换成单精度
乘以2除以2可以转换成移位运算
多项式算法(秦九韶算法)
在编译的时候进行初始化:比如将log(2)替换成0.69314718(C++,Java,PHP)
小心系统调用:系统调用的开销是很大的
有时候尝试一次优化可能不够,要多次尝试
赋值的时候要使用正确的数据类型(C++,C#,Java,VB,PHP)
int x=3.14(错误)
预先计算结果,运行的时候直接查表(Java,Python)
消除重复的表达式(Java,Python)
函数优化
将函数改成内联(C++)
使用低级语言
有时候即时优化之后性能还是不够,就要用更低级的语言来实现关键部分的代码(C++,Delphi)
时代在变化,手动代码调优慢慢不起作用了
编译器的优化能力在进步,有些代码调优的技术编译器已经帮你完成了
推荐读物
《Java Performance Tuning》O'Relly
《Java Platform Performance: Strategies and Tactics》Boston, MA
逻辑优化
当你知道答案后就不要再继续判断了(C++,Java)
将判定列表按顺序排列(VB+7%)
不要盲目听从优化建议
将case转换成if-then-else(C#,Java,VB)
比较类似的逻辑结构(case和if-then-else)
Java适合if-then-else
C# VB适合case
将复杂的表达式替换成简单的查表(C++,VB)
循环优化
将if移到for循环之外(C++,Java,VB)
将两个条件相同的for循环合并成一个for循环(C++,PHP)
将for循环的步长改为2,再重复一遍循环体(C++,Java,PHP,Python)
尽量减少for循环中的运算,重复的运算提到循环外(C++,C#,Java)
哨兵变量,适合线性查找算法(C#,Java,VB)
如果有多个循环,将循环次数最多的循环放在最里面(C++,Java,PHP)
数据变换
使用循环变量要使用整数而不是浮点数(C++,PHP,VB)
尽量减少数组的维度,可以将二维数组转换成一维数组进行处理(C++,C#,Java,PHP,Python,VB)
使用额外索引(动态规划)
操作索引编号而不是整个数据
使用缓存(C++,Java,Python,VB)
表达式优化
推导等价表达式
!a&&!b => !(a||b)
sqrt(x)<sqrt(y) => x<y (C++,VB,Python)
减少运算量
乘法转换成加法
指数转换成乘法
充分利用三角函数的变换
long long转换成long或int
浮点数转换成定点数或整数
双精度转换成单精度
乘以2除以2可以转换成移位运算
多项式算法(秦九韶算法)
在编译的时候进行初始化:比如将log(2)替换成0.69314718(C++,Java,PHP)
小心系统调用:系统调用的开销是很大的
有时候尝试一次优化可能不够,要多次尝试
赋值的时候要使用正确的数据类型(C++,C#,Java,VB,PHP)
int x=3.14(错误)
预先计算结果,运行的时候直接查表(Java,Python)
消除重复的表达式(Java,Python)
函数优化
将函数改成内联(C++)
使用低级语言
有时候即时优化之后性能还是不够,就要用更低级的语言来实现关键部分的代码(C++,Delphi)
时代在变化,手动代码调优慢慢不起作用了
编译器的优化能力在进步,有些代码调优的技术编译器已经帮你完成了
推荐读物
《Java Performance Tuning》O'Relly
《Java Platform Performance: Strategies and Tactics》Boston, MA
相关文章推荐
- 【读书笔记】代码大全32章:自文档技术
- 代码大全第二版读书笔记 第二部分-创建高质量的代码 八、防御式编程
- 优化控制结构——读书笔记[Linux程序设计大全]
- 代码大全第二版读书笔记 第四部分-语句 十七、不常见的控制结构
- 【读书笔记】代码大全27章:项目大小如何影响开发
- 优化后《简单工厂模式》构造的计算器代码—C#“反射”技术
- JSP技术大全 读书笔记(一)
- [读书笔记]Matlab代码优化
- 代码大全第二版读书笔记 第四部分-语句 十六、控制循环
- 【读书笔记】代码大全29章:集成
- 两个最容易被人忽略的基本代码优化技术
- 两个最容易被人忽略的基本代码优化技术
- 【读书笔记】代码大全
- AS3事件类型 (as3开发技术大全读书笔记)
- ARM流水线关键技术分析与代码优化
- Cpu优化大全 之 代码优化
- 【读书笔记】代码大全25章:代码调优
- 评《最容易被人忽略的基本代码优化技术》
- 几个简单的代码优化技术(二)
- 技术积累 — Keil 查看内存占用/优化代码