Entwickler-Ecke
Algorithmen, Optimierung und Assembler - arbeitsspeicherbedarf durch setlength beeinflussbar?
paul_swatschina - Sa 05.04.08 00:03
Titel: arbeitsspeicherbedarf durch setlength beeinflussbar?
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
busybyte - 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
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
AXMD: Code- durch Delphi-Tags ersetzt
paul_swatschina - 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 - Sa 05.04.08 00:38
gerne,setlength ist aber langsam und sollte nicht zu oft verwendet werden
paul_swatschina - Sa 05.04.08 00:54
kann ichs anders machen als mit setlength?
sind meine array-typen ungünstig?
busybyte - Sa 05.04.08 01:01
Array's sind schon gut, wenn sie nicht permanent mit
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 - Sa 05.04.08 01:06
nagut! trotzdem besten dank, und gute nacht:)
ich leg mich jatzt auch nieder!
Kroko - Sa 05.04.08 08:39
dynamische Array kann man auch mit Finalize(FMyArray); freigeben, ob es nun schneller/langsamer ist, kA
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!