我的程序怎么运行这么慢,如何提高程序运行速度呢?现在有4个for循环,它的结构如下-----------请高手指点
var
x,y,xx,yy;integer;
begin
for 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循环结构如上,但小弟我的程序运行之慢呀,如何才能提高运行速度了,
---------------------------
或 影响速度主要由哪些引起的了.提高速度的最好办法是什么呢?
问题点数:100、回复次数:12Top
1 楼zihan(子寒)回复于 2004-04-04 11:32:21 得分 30
这个主要根据你循环语句的代码而定,如果你里面有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;Top
2 楼hwz119(善凉的狼)回复于 2004-04-04 11:33:53 得分 0
可不可以改变一下你的程序逻辑,而不是局限于该程序算法呢Top
3 楼sxtdxvb(和我处不好,你自己找原因!QQ:466080385)回复于 2004-04-04 11:46:33 得分 0
同意楼上
循环太多了
虽然单层循环量不大 但是层数太多了 导致循环次数成指数增长
Top
4 楼alphax(豪言壮语的乌鸦)回复于 2004-04-04 11:53:46 得分 20
把循环次数少的放在外层,多的放在内层,可以提高一点点速度
不过你的问题在于你的内层执行了50*88*200*234=4,400*46,800=4,500*45,000=202,500,000
=202M次,还有外面几层
能不慢吗?Top
5 楼huazaijiajia(千军万马)回复于 2004-04-04 12:00:47 得分 50
在多重循环中,尽可能将最长的循环放在最内层,最短的循环放在最外层,以减少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 的写法比较好,因为程序更加简洁。
Top
6 楼racesun(夸父)回复于 2004-04-04 12:14:17 得分 0
循环太多了Top
7 楼lijinghe1(喜欢没有文化性格泼辣身材高大的女人)回复于 2004-04-04 12:19:35 得分 0
上面提到的优化方法我以为都不会有明显的改善,关键的问题是你是否真的需要这么多层的循环嵌套,如果是不可避免的,加个进度条完事了。Top
8 楼reallike(爱翔)(学得太多,得休息一下)回复于 2004-04-04 12:28:25 得分 0
看来数据结构没有学好……
是个(O)n4次方的算法,唉,还是补习一下基础吧。Top
9 楼foxfoxfoxchen(花粉过敏者)回复于 2004-04-04 12:28:54 得分 0
我在认真看一看能否改善一下循环嵌套.等一下哟.Top
10 楼SydPink(Miss Syd.Barrett)回复于 2004-04-04 12:44:19 得分 0
真不知道说点什么好。。。。。。。如果循环里只做 整形运算还可以。
如果不能够精简,那就开线程,放进度条吧。Top
11 楼huazaijiajia(千军万马)回复于 2004-04-04 14:16:43 得分 0
上面所说的是必须要用到这么多循环的情况下可以得到最大程度的改善。如果程序可以不用这么多
循环,而又用了这么多循环,那就是程序结构性问题了Top
12 楼wangyansurmount()回复于 2004-04-04 14:18:50 得分 0
搞的太复杂了,循环分解,这样会好些Top




