Autor Beitrag
Schorsch99
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 18.02.04 19:05 
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?

ausblenden 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//ende asp-Schleife
             end//ende qbb-Schleife
          end//ende qba-Schleife
       end//ende qab-Schleife
    end//ende qaa-Schleife
end;


Für jeden Rat bin ich dankbar!

Gruss, Schorsch99

Moderiert von user profile iconPeter Lustig: Delphi-Tags hinzugefügt
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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: www.luckie-online.de/tutorials/threads/ ;)
MaxiTB
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 679

Win2000, WinXp, Workbench ;-)
D7 Ent, VS2003 Arch.
BeitragVerfasst: Do 19.02.04 12:50 
ausblenden 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//ende asp-Schleife
             end//ende qbb-Schleife
           Application.ProcessMessages(); 
         end//ende qba-Schleife
       end//ende qab-Schleife
    end//ende qaa-Schleife
end;


So in etwa meinte es Luckie ...[/delphi]

_________________
Euer Mäxchen
Wer früher stirbt, ist länger tot.