程序员亘古不变的追求: 更快的代码运行速度,更小的资源占用。
*警告*: 本文所列出的均为“可以尝试的”方法。有的可能在你的环境根本不起作用。有的则能产生很好的效果。
如何写出更高效的代码? 写代码时可以注意这几个方面。(基本都来自于《code complete 2》一书, 郑重推荐!)
逻辑
- 知道答案后立刻退出。
伪代码:
for i =0; i< count; i++ {
if i == 3 {
print("hi, there!")
}
}
知道答案后依然在loop. 更好的方式为找到3以后立刻停止,在print 之后添加break
- 按照出现频率来调整判断顺序。
伪代码:
select "string" {
case "0" to "9":
print("hi, there!")
case "a" to "z", "A" to "Z":
print("hi, there!")
case " ":
print("hi, there!")
}
可以把最常出现的放到前面。 修改如下:
select "string" {
case "a" to "z", "A" to "Z":
print("hi, there!")
case "0" to "9":
print("hi, there!")
case " ":
print("hi, there!")
}
这个方法在 case match 以后 直接break 的语言会很好用 如: go。 像java这样不会自动break 则没有任何效果。但可以结合 方法1使用。
loops
- 将判断外提
伪代码:
for i = 0; i < count; i++ {
if name == "arion" {
print("arion")
} else {
print("hi, there.")
}
}
修改为:
if name == "arion" {
for i = 0; i < count; i++ {
print("arion")
}
} else {
for i = 0; i < count; i++ {
print("hi there.")
}
}
这样代码不是更丑了吗? 而且更难维护。!! 但是你可以让人无法接手你的代码阿–! 你就是那个无法取代的崽er.(玩笑) 其实我们可以让这段代码更容易维护一些,你想想。
- 尽量减少在循环内做的工作。
伪代码:
for i = 0 ; i < count; i++{
all[i] = a[i] + b * 4 +3
}
修改为:
c = b*4+3
for i = 0; i < count; i++ {
all[i] = a[i] + c
}
这样不仅可以提高代码的性能还能改善代码的可读性。 当然像上面示例一样的 用b c 这样的变量名 怕不是会被喷死。
- 把最忙的循环放在最内层。
伪代码:
for col = 0; col<100; col ++ {
for row = 0; row<5; row ++ {
sum += col *row
}
}
分析下 我们 执行了 100次外部循环, 100 *5 次 内部循环 一共600。
修改为:
for row = 0; row < 5; row ++ {
for col = 0; col <100; col++ {
sum += col*row
}
}
这次我们执行了 5次外部循环。 5 * 100 次内部循环, 一共505次
数据
- 能用整型就就不用浮点。
- 数组维度尽可能的少。
- 使用缓存。 从内存拿永远比硬盘io快。
说到缓存。如果创建新元素的代价越大,请求相同信息的次数越多,缓存就越有价值。