代码调整技术(Code-Tuning Techniques)

      难得这个周末双休,今晚再次拿起令人兴奋的床头书--《代码大全》,随意翻看了关于“代码调整技术”这一章节,其中有些写得不错。固写个这篇博客,以便日后回忆及和大伙分享。

     其中所讲述的调整技术提高代码运行速度的方法,同时也对如何减小代码的资源占用给出了一些建议。程序性能通常同代码的速度和资源占用有关,但减小代码资源占用更主要的是通过对类和数据结构的重新设计来实现,而非代码调整。代码调整更多的是指小规模的修改,而非大范围的设计变更。

     代码调整似乎同 “重构” 有些类似,但重构是去改善程序内部结构。而代码调整所讲述的内容,可将其称为 “反重构” 而非 “改善内部结构” 或许更为恰当。这种改变是以牺牲程序内部结构的某些特性来换取更高的性能。就定义而言,这种说法并无不妥。即使所做改变没有损害程序内部结构,我们也不应该认为这是一种优化。我们就是这样使用,而且把这种改变当做是标准编程实践的一部分。

     在知道答案后停止判断

假如你写下了这样的语句:

if( 5 < x ) and ( x < 10 ) then .....

一旦你确定x不大于5,你就不需要执行第二部分判断了。

    按照出现频率来调整判断顺序

安排判断的顺序,让运行最快和判断结果最有可能为真的判断首先被执行。也就是说,让程序更容易进入常见情况的处理,如果有低效率的情况,那就是应该出现再出来非常见的情况时。

    使用惰性求值:

如果程序采用了这一方法,那么它会避免做任何事情,直到迫不得已。惰性求值类似于即使完成策略(just-in-time),即仅到工作必须完成的时候才去处理。

举个例子,假设你的程序有一张表,里面有5000个值。程序在启动时生成这张表,然后再运行中使用它。如果程序仅仅用到整张表的很小一部分,那么与其在最开始计算表中的全部内容,还不如到需要的时候再计算。一旦某个条目被计算出来,仍然可以把它存放起来,以备后用(所谓的缓存)。

  尽可能减少在循环内部做的工作:

编写高效循环在于尽可能减少循环内部所做的工作。如果你可以在循环外面计算语句或某部分语句,而在循环内部只是使用计算结果,那么就把它们放到外面。这是一种很好的编程实践,在很多情况下还可以改善程序的可读性。

C++例子:循环内部的复杂指针表达式

for( i=0; i< rateCount; i++ ){
    netRate[i] = baseRate[i] * rates->discounts->factors->net;
}
简化复杂的指针表达式

quantityDiscount = rates->discounts->factors->net;
for( i=0; i< rateCount; i++ ){
    netRate[i] = baseRate[i] * quantityDiscount ;
}

     待续中……

代码调整技术(Code-Tuning Techniques)

上一篇:Java的Random总结


下一篇:CSDN 博客没有千里之外了,而是显示了排名