Autor Beitrag
Niko S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Mo 17.07.06 14:04 
Also ich hab ein kleines Programm geschireben, was eigendlich nur ein ablauf macht .. sone for schleife die ca 2600 mal wiederholt wird.
Das Programm frisst aber den ganzen CPU auf und wenn man nebenbei etwas macht scheint das Programm abzuschmieren.
Weiß einer wie ich den cpu verbrauch mindern kann? bzw. begrenzen kann?
crowley
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 406

Win XP, Win Vista, Mandriva, Ubuntu
Delphi 4-8, Delphi 2006, Delphi 2007
BeitragVerfasst: Mo 17.07.06 14:08 
na, es kommt ganz darauf an, was du in deiner schleife machst ;)
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mo 17.07.06 14:13 
Wieso willst du den CPU-Verbrauch vermindern? Wenn dein Programm rechnen will, und der Computer grade nichts anderes zu tun hat, dann lass den doch mal auf Hochtouren laufen...:D

Zu deinem Problem: Pack mal in deine Schleife alle paar Durchläufe ein Application.ProcessMessages rein. Das sorgt dafür, dass deine Anwendung bedienbar bleibt und nicht "einfriert".
Besser wäre es aber wahrscheinlich, da du relativ wenige Durchgänge hast, die aber scheinbar schon recht lange dauern, wenn du die Berechnung in einen Thread auslagern würdest...

_________________
We are, we were and will not be.
Niko S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Mo 17.07.06 14:52 
Nagut aber ist ein wenig spaggetti text ^^ ich habs noch nicht formatiert wollte es erst zum laufen bekommen xD und bin ein relativer neuling ^^

ausblenden volle Höhe 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:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
procedure TForm1.Button2Click(Sender: TObject);
var times,i,rest,ids,lines:Integer;
begin
lines := memo1.Lines.Count;
progressbar1.Max := lines;
button1.Enabled := false;
button2.Enabled := false;
for i:= 1 to lines do
begin
combobox1.ItemIndex := combobox1.itemindex +1;
edit24.Text := combobox1.items[combobox1.itemindex];
if ((Pos('/',edit24.Text) = 1OR (edit24.text = '')) then
begin
combobox1.ItemIndex := combobox1.itemindex +1;
edit24.Text := combobox1.items[combobox1.itemindex];
progressbar1.position := progressbar1.position+1;
end
else begin

ids := Pos(',',edit24.text)-1;
edit2.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit3.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit4.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit5.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit6.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit7.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit8.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit9.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit10.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit11.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit12.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit13.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit14.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit15.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit16.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit17.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit18.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit19.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit20.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit21.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);
ids := Pos(',',edit24.text)-1;
edit22.Text := Copy(edit24.text,1,ids);
rest := Pos(',',edit24.text)+1;
edit24.Text := Copy(edit24.text,rest,999);

edit23.Text := Copy(edit24.text,1,999);


if ((edit5.text = '4'OR (edit5.text = '5')) then
begin
edit12.text := edit1.text;
edit25.text := edit2.text +','+edit3.text+','+edit4.text+','+edit5.text+','+edit6.text+','+edit7.text+','+edit8.text+','+edit9.text+','+edit10.text+','+edit11.text+','+edit12.text+','+edit13.text+','+edit14.text+','+edit15.text+','+edit16.text+','+edit17.text+','+edit18.text+','+edit19.text+','+edit20.text+','+edit21.text+','+edit22.text+','+edit23.text;
Memo1.Lines.Strings[combobox1.itemindex] := edit25.Text;
times := times +1;
end;

progressbar1.position := progressbar1.position+1;
end;
if (ProgressBar1.position = ProgressBar1.Max) then
begin
button1.Enabled := True;
button2.Enabled := True;
Memo1.Lines.SaveToFile(opendialog1.filename);
label1.caption := inttostr(times);
end;

end;

end;

ich muss das nacher noch sortieren und auskommentieren ;P
Die datei die er einliest ist ca 2600 zeilen kann wie schon gesagt
------
Und Sorry wegen rechtschreibung ich achte da nicht so drauf
Sy-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177



BeitragVerfasst: Mo 17.07.06 15:21 
Also du kannst es stabiler gestalten, indem du einfach in der schleife application.processmessages; machst
Damit sollte normal nichts abstürzen, ist meist nur eine vermutung, weil kein feedback vom Prog kommt

Ich würde an deiner stelle auch möglichst variablen benutzen, die nicht dargestellten werden
wie bei dir zB dein Memo oder die Textfelder
dann würde es noch 100x schneller laufen.

-> TStringlist
-> Strings

Gruß
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 17.07.06 20:02 
user profile iconSy- hat folgendes geschrieben:
Also du kannst es stabiler gestalten, indem du einfach in der schleife application.processmessages; machst

Auch Application.ProcessMessages korrigiert die Schleife nicht. :roll:

ausblenden Delphi-Quelltext
1:
for i := 0 to lines - 1 do					

muss es heißen.

user profile iconSimak hat folgendes geschrieben:
Nagut aber ist ein wenig spaggetti text ^^ ich habs noch nicht formatiert

Aber wir sollen uns da jetzt zurecht finden und durch wühlen?
Sy-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 177



BeitragVerfasst: Di 18.07.06 16:52 
Was soll da korrigiert werden?
Soll nur stabiler laufen bzw. eigentlich weniger cpu fressen.

Und wie kommst du nun auf die voreilige idee, dass es
for i := 0 to lines - 1 do
heißen soll?
der benutzt i garnicht, außer zum hochzählen und dafür passt es bereits.

Du verwirrst den ja noch :wink:

Wenn was an der geschwindigkeit verbessert werden soll - klappen tut es ja
soll er alle variablen auf variablen tun statt auf kompos.

Kurze Anmerkung:
Da du ja noch neu bist kannste eigentlich das ganze mal so ausprobieren,
dass du visible:=false auf alle kompos stellst, also sprich nicht anzeigen lässt (die textfelder und memos die sich die ganze zeit ändern)
Das würde das ganze auch schon stark beschleunigen.
Wenns sein muss kannste auch alle zum schluss wieder einblenden lassen.
Niko S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 566
Erhaltene Danke: 10

Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
BeitragVerfasst: Di 18.07.06 20:20 
passt alles das mit dem prozess dings klappt auch damit das ding nid mehr einfriert ^^

und ich hab das schon alles visible := false; hab ich auch alles ^^
danke trozdem

(mit nem 1,3 ghz und 512mb ram kommt nicht viel leistung xD mit meinem neuen pc geht das was uf den alten in 3 minuten war in 3 sekunden xD)