Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Lange CPU-Dauer bei geschachtelten Loops
Schorsch99 - Mi 18.02.04 19:05
Titel: Lange CPU-Dauer bei geschachtelten Loops
Hallo an alle!
Zunächst einmal vielen Dank für die schnelle Antwort auf die vorigen Fragen, was mir sher geholfen hat!
Nun bin ich auf ein weiteres Problem gestossen, was mit der Prozessorleistung zusammen hängen muss:
Folgende Iteration fügt die Zahlen 0 bis 161050 in einen Stringgrid ein. Es dauert ca. 2min CPU-Zeit um diese Prozedur auszuführen.
Da die einzelnen Parameter qaa..qbb für weitere Rechnungen gebraucht werden, muss die Schleife 5-fach geschachtelt sein.
Je aufwendiger die Befehle im innersten Teil der Schleifen werden, desto länger dauert die Ausführung, bis sich das Programm schliesslich aufhängt.
Warum wird der Rechner hier so stark beansprucht? Wie kann man den Prozess beschleunigen/weniger aufwendig gestalten?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| begin he1:=-1; for qaa:=0 to 10 do begin for qab:=0 to 10 do begin for qba:=0 to 10 do begin for qbb:=0 to 10 do begin for asp:=0 to 10 do
begin he1:=he1+1; form1.StringGrid1.cells[0,he1]:=inttostr (he1); end;
end; end; end; end; end; end; |
Für jeden Rat bin ich dankbar!
Gruss, Schorsch99
Moderiert von
Peter Lustig: Delphi-Tags hinzugefügt
Delete - Mi 18.02.04 21:16
Aufhängen tut sich dein Programm wohl nicht, es wird nur nicht mehr reagiren, wie soll es auch, es ist ja die ganze Zeit beschäftigt. Füg mal ein Application.Processmessages ein. Und was die CPU auslastung angeht, was soll's, zum Rechnen hast du sie doch gekauft oder nicht? Und so lange deine anwendung noch Rechenzeit an andere Prozesse abgibt, wenn sie benötigt wird, ist das doch OK. Und so lange du nichts an den Prioritäten geschraubt hast, sollte sie das auch tun.
alternativ wäre zu überlegen, das ganze in einen Thread auszulagern, da musst du aber bei der Synchronisation vorsichtig sein, sonst hast du das gleiche Problem wie jetzt. Also nur synchronisieren, wenn nötig.
Schorsch99 - Do 19.02.04 11:42
Titel: ...mehr details bitte!
An Luckie:
tschuldigung, aber bin erst auf dem Weg n Delphi-Creck zu werden... was ist ein Application.Processmessages und ein Thread???
Danke für weitere Infos!!
Schorsch99
Delete - Do 19.02.04 11:50
Processmessages ist eine Methode von TApplication. Und das sollst du mal in der Schleife einbauen. Denn dadurch gibst du deiner anwendung die Möglichkiet auf Benutzereingaben zu reagieren.
Ein Thread? Hier hat jemand was darüber geschrieben:
http://www.luckie-online.de/tutorials/threads/ ;)
MaxiTB - Do 19.02.04 12:50
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| begin he1:=-1; for qaa:=0 to 10 do begin for qab:=0 to 10 do begin for qba:=0 to 10 do begin for qbb:=0 to 10 do begin for asp:=0 to 10 do
begin he1:=he1+1; form1.StringGrid1.cells[0,he1]:=inttostr (he1); end;
end; end; Application.ProcessMessages(); end; end; end; end; |
So in etwa meinte es Luckie ...[/delphi]
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!