回 帖 发 新 帖 刷新版面

主题:关于编程效率的问题?

我一般编程讲求的是文件大小和运行速度,并且我不大喜欢使用太多变量。
太多的变量对程序倒底有多大影响??

有时多一个变量要省好几行代码,这时我就不知道该怎么取舍了。
请问是多几个变量好,还是多几个FOR或是几个IF好呢?

还有如:前提(B>10)
    FOR A=1 TO B  '原程序
        IF A<>5 OR A<>10 THEN ...
    NEXT A
----------------------
    FOR A=1 TO 4 '改进后程序
        ...
    NEXT A
    FOR A=6 TO 9
        ...
    NEXT A
    FOR A=11 TO B
        ...
    NEXT A
-----------------------
我相当于用FOR省掉了IF,但代码要多很多并且...是相同的。这样对提高程序效率有好处码?

回复列表 (共13个回复)

沙发

我觉得你把IF改成那么多FOR只会使程序的可读性降低!

板凳

代码多了当然可读性降低,但少了IF程序会不会快一点呢?
我就是不知道代码多会不会影响运行速度或是占用内存?

3 楼

得请专家回答!!!

4 楼

我不是专家.
能不能回答?

5 楼

你可以自己做这样区别的两个程序作比较看看:

begintime#=timer
for rep=1 to 10000
  **************(你的程序体)
next
endtime#=timer
print "所用时间为:";endtime#-begintime#

记下这个运行时间后
再把程序体改成另外一种方式再运行一次
比较这两个时间的差别


通常这种一个(判断)语句代替更多的(其他)语句
我们可以认为这是对程序的优化.因为当中运行的效率和代码质量都提高了,
而可以忽略相差不太大的运行时间,但当这个时间差别过大又另当别论了.

至于文件大小运行速度变量多寡这些......
运行速度当然是比较重要的,还需要顾全大局,全面检查排错遗漏.
文件大小当然也需要计较,但也不能削足就履.
至于变量的多少,这个问题就需要多方面考虑了
当然,变量是需要占用内存的,最明显的就是数组的使用了
在内存足够的情况下,使用更多的变量如果可以加快计算处理速度的话.
还是建议利用变量的杠杆来加快执行效率.
当然,能节省能合并的变量肯定是不随意浪费的占优
因为变量也需要时间去安排空间和计算的.

在你这个例子里,
你会觉得使用了三个for可以节省了一个IF的判断操作
但你这一个IF的判断只占用了一丁点甚至可以省略的运行时间
只是对操作对象作简单的判断而已
而你加多的两个for的操作却比这一个IF所浪费的操作时间多得多
因为for要重新确定自变量的位置,计算运算的范围.这些操作也是需要时间的

6 楼

真是恍然大悟啊!比专家的回答还要精彩,不愧是极品中的极品,专家中的专家!

7 楼

谢谢moz(给你打30分)
有一点我要说明的是:
我虽增加了两个FOR,但总循环次数要比原程序还少两次。
我所省掉的不是一个IF,因为原程序中的每次循环都要做IF判断。

8 楼

我明白你的意思,
你觉得总的循环次数减少了,
总该省下一点时间对吧.
其实你这样一改,程序代码就已经增加了不少了.
而且,重新处理for的内容也已经把那些时间拿回来了,
你试过比较过两者的运行时间没有?我估计相差不了多少的.
而且如果你把三个for合在一起执行的话
程序会稳定的反复在同一个地方循环,
这样程序的速度会更快的,(这和缓存的道理相同)

我不太清楚你程序运行的范围和条件
如果说,你是想逢五跳过的话,我建议你可以这样改一改:
for a=1 to b
    if a mod 5 =0 then a=a+1
   .............
   ......
next

9 楼

只是5和10跳过,就算是重新处量FOR会加重系统负担
但没有了每次循环的IF判断也是一种减轻呀
程序小感觉不大,我没有作大程序这样的试验
因为执行语句太多了,我这样一改几乎将文件扩大了N倍
算了,我还是用timer测试一下,如果变化不是很大还是改回来(必竟文件小一些,也好看一些)[em9]

10 楼

只是5和10跳过
if a=5 or a=10 then a=a+1
重新处理for相当于在担子上加了半筐谷子
减少每次if的负担相当于在担子里拿掉一粒谷子

小程序更没有比较这些小事情的必要了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册