PB代码优化

时间:2007-06-15 来源: 作者: 【字体: 减小 增大收藏 | 投稿
  
现今计算机的运行速度已经很快了,并且由于老板时常在耳边念着紧箍咒,因此,我们有意或者无意的忘记优化我们的代码,只要能完成任务就行了(我也是)。不过,我们闲下来的时候,不妨也来看看我们的代码是否有需要改进的地方。下面就是我觉得值得优化的几种情况。

财管家 园 fs119.net

财,管家园,fs119.net

第一种情况:
  IFcondition1ANDcondition2THEN 财软联盟.fs119.net

//Codegoeshere.
财软联.盟.fs119.net

ENDIF
财软联 盟 fs119.net

财软.联盟.fs119.net

IFcondition1THEN
财软联盟 fs119.net

IFcondition2THEN 财 管家园 fs119.net

//Codegoeshere.
财软.联盟.fs119.net

ENDIF 财,管家园,fs119.net

ENDIF 财 软联盟 fs119.net

财软联盟.fs119.net

对于书写的第一种方式,由于PB编译方式与常见的方式不同,就是无论条件1的值如何,都要对条件2进行运算。这样一来,当条件1false时,就可能要无谓的对条件2进行运算了。就按随机的概率而言,可能会多进行一半的运算。因此,对于大多数情况而言,我想最好是以第二种方式书写。当然,特殊情况也是有的,那就是你的确想对条件2进行运算。类似地,对于or也一样。 财软联盟 fs119.net

财软联,盟,fs119.net

IFcondition1ORcondition2THEN 财管家 园 fs119.net

//Codegoeshere. 财管家 园 fs119.net

ENDIF 财软联.盟.fs119.net

财管.家园.fs119.net

IFcondition1THEN
财软联.盟.fs119.net

//Codegoeshere. 财管,家园,fs119.net

ELSE

财管家园.fs119.net

IFcondition2THEN 财软联盟,fs119.net

//Codegoeshere. 财管家 园 fs119.net

ENDIF
财软联 盟 fs119.net

ENDIF
财 管家园 fs119.net

财管家园 fs119.net

财软,联盟,fs119.net

财 软联盟 fs119.net


财管.家园.fs119.net

财,管家园,fs119.net

第二种情况:

财管家园,fs119.net

IFNOTconditionTHEN
财管家园,fs119.net

//Codegoeshere. 财软联.盟.fs119.net

ENDIF 财,软联盟,fs119.net

财 管家园 fs119.net

IFconditionTHEN
财,管家园,fs119.net

//Nocodegoeshere.
财 管家园 fs119.net

ELSE 财软联盟,fs119.net

//Codegoeshere. 财,管家园,fs119.net

ENDIF

财管 家园 fs119.net

财管.家园.fs119.net

对于上一种方式,条件表达式返回false并且再进行一个非运算,才执行下面的代码。这样相对于下面一种书写方式可能多执行了一个非运算。如果大家有什么疑问,您不妨测试一下下面这个例子:

财 软联盟 fs119.net

财管家园.fs119.net

//小测试:其中的判断条件只是为了表示一下,实际情况可能更复杂。
财软 联盟 fs119.net

财管.家园.fs119.net

longi//计数器
财 软联盟 fs119.net

longll_start//执行开始时间

财软联.盟.fs119.net

longll_used1//方式一耗时 财,软联盟,fs119.net

longll_used2//方式二耗时
财 软联盟 fs119.net

财管家,园,fs119.net

//方式一

财管,家园,fs119.net

ll_start=Cpu() 财管家 园 fs119.net

fori=1to900000
财软联盟,fs119.net

ifnot(1>1)Then 财管家园 fs119.net

i=i 财软 联盟 fs119.net

endif 财管家,园,fs119.net

next 财管,家园,fs119.net

ll_used1=Cpu()-ll_start 财,软联盟,fs119.net

财软联.盟.fs119.net

财.软联盟.fs119.net

财管家 园 fs119.net


财软联,盟,fs119.net

财软联盟,fs119.net

财软 联盟 fs119.net

//方式二

财软 联盟 fs119.net

ll_start=Cpu() 财 管家园 fs119.net

fori=1to900000
财管家园.fs119.net

if1>1Then

财软,联盟,fs119.net

财,管家园,fs119.net

else
财软联盟 fs119.net

i=i
财管 家园 fs119.net

endif
财管.家园.fs119.net

Next
财管家园 fs119.net

ll_used2=Cpu()-ll_start

财管家.园.fs119.net

财软.联盟.fs119.net

//查看结果

财软,联盟,fs119.net

Ifll_used2>ll_used1Then 财软,联盟,fs119.net

MessageBox("提示","前者运行时间短!")
财软联盟,fs119.net

Else 财,管家园,fs119.net

MessageBox("提示","后者运行时间短!") 财软联,盟,fs119.net

EndIf
财软联 盟 fs119.net

财软联 盟 fs119.net

可能有人会说,用下面的那种方式,如果在条件表达式返回false的时候,那么,if下就没有代码,这样看起来就不太舒服。的确是这样。因此,我们在写成上面的那种方式时,尽量保持不要使用not运算,而保持条件表达式本身就返回希望的true值。
财软,联盟,fs119.net

  第三种情况: IFcondition1THEN 财管家.园.fs119.net

//condition1
财软联 盟 fs119.net

ELSEIFcondition2THEN 财管家,园,fs119.net

//condition2 财管家园.fs119.net

ELSEIFcondition3THEN

财软联,盟,fs119.net

//condition3 财 管家园 fs119.net

ELSE

财软联,盟,fs119.net

//Other

财管家园,fs119.net

ENDIF

财 软联盟 fs119.net

财管家.园.fs119.net

choosecase/*expression*/
财.管家园.fs119.net

case/*item*/
财管家园,fs119.net

/*statementblock*/
财软 联盟 fs119.net

case/*item*/ 财管.家园.fs119.net

/*statementblock*/ 财管家园 fs119.net

caseelse
财软联,盟,fs119.net

/*statementblock*/
财软联盟.fs119.net

endchoose 财软联盟,fs119.net

财,管家园,fs119.net

对于形如这样的表达式,我想我们一般都没去考虑先后顺序。但是,其实我们应该把最可能发生的情况,放在前面,这样可以避免在对一大堆条件进行判断后,才到我们真正需要运行代码的地方
财 软联盟 fs119.net

财软,联盟,fs119.net

财 管家园 fs119.net

财管,家园,fs119.net

财软.联盟.fs119.net


财管家园 fs119.net

财,管家园,fs119.net

第四种情况:

财软联,盟,fs119.net

财管家,园,fs119.net

 FOR...TO...

财管家园.fs119.net

财.软联盟.fs119.net

IFconditionTHEN

财 软联盟 fs119.net

//true 财软联,盟,fs119.net

ELSE 财 软联盟 fs119.net

//false 财管,家园,fs119.net

ENDIF
财软联盟,fs119.net

财,管家园,fs119.net

NEXT 财管家园 fs119.net

财管家.园.fs119.net

IFconditionTHEN 财 管家园 fs119.net

//true

财管.家园.fs119.net

FOR...TO...

财 软联盟 fs119.net

//Codegoeshere 财,软联盟,fs119.net

NEXT
财管家.园.fs119.net

ELSE 财管.家园.fs119.net

//false 财,软联盟,fs119.net

FOR...TO... 财管家园.fs119.net

//Codegoeshere 财软联盟,fs119.net

NEXT

财软联 盟 fs119.net

ENDIF

财.管家园.fs119.net

财软联盟.fs119.net

尽管下面这种书写方式,看起来好象代码多了一些,但是却极大的避免了在每个循环中都进行条件判断。其实,一个原则就是,我们应当尽量避免在循环中进行条件判断,而是把条件判断放到循环体的外面进行。 财,软联盟,fs119.net

财管家 园 fs119.net

其实,真正对于PB语言有特殊性的,也就是第一种情况,对于后面三种情况,对于别的编程语言,我想也同样适用。

财软,联盟,fs119.net

财管.家园.fs119.net

这是我的一点体会,谬误的地方请大家指正。 财管家 园 fs119.net

财管 家园 fs119.net

财管家,园,fs119.net


上一篇:在pb中用语音读金额
下一篇:何在PB中实现串口编程

精品课程推荐