Autor Beitrag
paul_swatschina
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 05.04.08 00:03 
hallo leute,

ich programmiere an einem grossen programm mit relativ grossen daten mengen.
und oft stürtzt mir der rechner ab, weil ich den arbeitsspeicher überlaste.
ich verwende innerhalb einer procedure zahlreiche arrays:
zb: 1) array of extended;
oder 2) array of array of extended;

die dimensionen werden zur laufzeit festgesetzt.

innerhalb der procedure sind mehrere lokale variablen also vom 1. oder 2. typ.
jetzt würde mich interessieren, ob es etwas nützt wenn man innerhald der procedure, sobald eine bestimmte variable nicht mehr gebraucht wird, setlength(name,0,0); macht...
verringert das den arbeitsspeicherbedarf?
oder wird erst wieder alles freigegeben wenn die procedure fertig ist?

ich kanns leider nur schwer testen, weil ich noch mit 10 anderen problemen kämpfe, und nicht genau weiss worans liegt!

danke,
paul


Zuletzt bearbeitet von paul_swatschina am Sa 05.04.08 00:12, insgesamt 1-mal bearbeitet
busybyte
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 40



BeitragVerfasst: Sa 05.04.08 00:30 
Ja bringt definitiv was, hab's getestet. image_test habe ich verwendet weil ich gerade was ähnliches probiert habe,Achtung ca.500MB Belastung
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var images : array of TImage;
procedure image_test;
begin
  setLength(images,100000000);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
image_test;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  setLength(images,0);
end;


Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von busybyte am Sa 05.04.08 00:34, insgesamt 1-mal bearbeitet
paul_swatschina Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 05.04.08 00:34 
danke für den test.
dann werde ich das ganze wieder mal unter qualen einbauen.

ich hatte nur manchmal den eindruck, dass mein rechner nach einem durchlauf der procedure sehr langsam ist. und es dauert immer ein paar minuten, bis er sich erholt und es wieder weitergeht...

aber danke, trotzdem.
paul
busybyte
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 40



BeitragVerfasst: Sa 05.04.08 00:38 
gerne,setlength ist aber langsam und sollte nicht zu oft verwendet werden
paul_swatschina Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 05.04.08 00:54 
kann ichs anders machen als mit setlength?
sind meine array-typen ungünstig?
busybyte
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 40



BeitragVerfasst: Sa 05.04.08 01:01 
Array's sind schon gut, wenn sie nicht permanent mit
ausblenden Quelltext
1:
Setlength(irgendwas,Length(irgendwas)+1);					

vergrössert werden.
Evtl kann noch der Typ des Arrays im Bezug auf Variablengrösse optimiert werden .
Für den Speicherverbrauch wüsste ich um diese Uhrzeit und ich glaube auch generell keine Alternative
paul_swatschina Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Sa 05.04.08 01:06 
nagut! trotzdem besten dank, und gute nacht:)

ich leg mich jatzt auch nieder!
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Sa 05.04.08 08:39 
dynamische Array kann man auch mit Finalize(FMyArray); freigeben, ob es nun schneller/langsamer ist, kA

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!