var
x,y,xx,yy;integer;
beginfor x:=0 to 200 do begin
for y:=0 to 234 do begin
    这里有代码
    for xx:=0 to 50 do begin
    for yy:=0 to 88 do begin
    这里有代码
    end;
    这里有代码
    end;
    这里有代码
end;
end;
for x:=0 to 120 do begin
这里有代码
end;
for y:=0 to 300 do begin
这里有代码
end;end;for循环结构如上,但小弟我的程序运行之慢呀,如何才能提高运行速度了,
---------------------------
或  影响速度主要由哪些引起的了.提高速度的最好办法是什么呢?

解决方案 »

  1.   

    这个主要根据你循环语句的代码而定,如果你里面有if语句,那么建议你把if语句提到循环的外面.这样,也许程序看上去不是那么清晰,但是效率要高一些,比如说
    for I := 0 to 100 do
    begin
      if  then
      begin
      end
      else
      begin
      end;
    end;
    改为
    if then
    begin
      for do
      begin
      end;
    end
    else 
    begin
      for do
      begin
      end;
    end;
      

  2.   

    在多重循环中,尽可能将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。举个例子:
    for i:=0 to 100 do  //低效率的循环! 
    begin
      for j:=0 to 5 do
        sum:=sum + a[i][j];
    end;
    相比之下,如果这样写:
    for j:=0 to 5 do  //高效率
    begin
      for i:=0 to 100 do
        sum:=sum + a[i][j];
    end; 另外,如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
    “zihan(子寒)”说的也就是这个意思, 如:
    程序 A:
    for i:=0 to N do  //效率低但程序简洁
    begin
      if (condition) then
        DoSomething
      else
        DoOtherthing;
    end;
    如果这样写:
    程序 B:
    if (condition) then  //效率高但程序不简洁
      for i:=0 to N do
        DoSomething
    else
      for i:=0 to N do
        DoOtherthing;程序 A 比程序 B 多执行了N-1次逻辑判断。并且由于前者老要进行逻辑判断,打断了循环“流水线”作业,使得编译器不能对循环进行优化处理,降低了效率。如果N非常大,最好采用程序 B 的写法,可以提高效率。如果N非常小,两者效率差别并不明显,采用程序 A 的写法比较好,因为程序更加简洁。