【读书笔记】代码大全26章:代码优化技术
来源:互联网 发布:php ceil 编辑:程序博客网 时间:2024/05/17 23:09
- 代码优化其实就是反向重构
- 逻辑优化
- 当你知道答案后就不要再继续判断了(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
0 0
- 【读书笔记】代码大全26章:代码优化技术
- 【读书笔记】代码大全32章:自文档技术
- 《代码大全》读书笔记-1
- 《代码大全》读书笔记一
- 《代码大全》读书笔记I
- 《代码大全》读书笔记一
- 《代码大全》读书笔记
- 《代码大全》读书笔记上篇
- 代码大全--子程序 读书笔记
- 代码大全2读书笔记
- 代码大全2读书笔记
- 代码大全2读书笔记
- 《代码大全》 读书笔记
- 《代码大全》读书笔记
- 《代码大全2》读书笔记
- 《代码大全》读书笔记--调试
- 代码大全读书笔记
- 【读书笔记】代码大全
- js利用闭包锁变量
- 动态规划法
- 看懂JSP声明的格式。。。
- java 里面volatile变量
- 有需求,就总有人去填补,这个世界变化太快了
- 【读书笔记】代码大全26章:代码优化技术
- 暗香浮动 教你用后期给花卉作品增加亮点
- C语言sprintf与sscanf函数[总结]
- Fibonacci
- 纯虚析构函数
- 叉积求多边形面积
- Spring 标签学习日记(一)
- 记忆方法与快速阅读——什么是快速阅读
- Eddy's AC难题 2200