Autor Beitrag
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Sa 08.03.03 14:59 
Also, ich hab ein vertrickt-vertracktes Programm geschrieben, das mir den Speicher auffrisst. Und zwar ist es folgendermassen: Ich brauchte eine Funktion, die mir alle möglichen Kombinationen von n Objekten durchprobiert (und zwar auch 3er-, 4er-...ner-Kombinationen).
Jedenfalls dachte ich, die Lösung sei eine rekursive Prozedur, welche alle Möglichkeiten durchspielen sollte. Dies tut sie auch, das Problem ist nur, dass ich jedes Mal beim Prozedur-Aufruf eine neue TObjectList erstellen muss (darin sind die Objekte gespeichert), denn die alte darf nicht verändert werden. Und das gibt natürlich mit der Zeit einen "Out Of Memory" - Fehler.
Auch wenn es ein etwas komisches Problem ist...Hat jemand irgend einen Tipp?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 08.03.03 15:31 
Brauchst du denn die TObjektlist nach beenden der Prozedur noch? Wenn nicht: Speicher wieder freigeben. Wenn doch: in eine Datei speichern und Speicher freigeben (Vorraussetzung: auf der Platte ist genug Platz).

Oder ist die Rekursionstiefe auch so riesig, dass das freigeben nach dem Rückschritt zur vorigen Rekursionsstufe auch nix bringt?

_________________
We are, we were and will not be.
mars Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Sa 08.03.03 22:40 
Danke für die Antwort...Ich denke, die TObjectList wird automatisch freigegeben, wenn die Prozedur beendet ist und solange brauche ich sie ja...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 09.03.03 03:44 
Alles, was du selber erstellst / erzeugst mußt du auch wieder selber freigeben.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8553
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 09.03.03 08:31 
genau, der Auffassung war ich bisher auch immer, auch wenn ich mich nicht immer dran halte :roll:

Aber es gibt noch ne Möglichkeit. Ich denke mal, n ist bei dir nicht zu groß. Und da du alle Kombinationen durchprobieren willst, sollte die Rekursionstiefe auch höchstens n sein. Das heisst, du brauchst eigentlich nur n verschiedenen TObjectlisten.
Erstell dir dann doch ein Array of TObjectlist der Länge n. (Das natürlich global, nicht lokal in der Procedur)
Welche list du gerade bearbeiten kannst, hängt von der jeweilige Rekursionstufe ab, in der du grade bist. Die kannst du einfach mitspeichern mit
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure rekursiv;
begin
   ...
   inc(tiefenzaehler);
   rekursiv;
   dec(tiefenzaehler);
   ...
end;

Wenn es damit immer noch zu Speicherproblemen kommt, dann liegt der Fehler ganz wo anders. Zum Beispiel, wenn du in der rek. Prozedur auch Objekte für die Liste erstellst: Die Liste mag ja meinetwegen weg sein, aber die Objekte bleiben auf jeden Fall (sonst würde MEIN aktuelles Projekt nicht klappen :wink: )

_________________
We are, we were and will not be.
mars Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: So 09.03.03 17:56 
Ich werde mir das mit dem Freigeben noch mal ankucken, aber zur Tiefe n: Du hast recht, n ist nicht sehr gross (hab ja nur eine langsame Maschine hier :wink: ), aber es gibt tatsächlich mehr als n TObjektlisten gleichzeitig, denn...das ist kompliziert zu erklären...ähm...
Ich werd jetzt erstmal ausprobieren, obs mit dem Freigeben besser klappt und wenn nicht, versuch ichs doch noch zu erklären.
Danke jedenfalls für eure Mühe!
mars Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: So 09.03.03 18:44 
Nun, es hat tatsächlich geklappt..danke!
Ich sehe nun aber auch, dass es schon ziemlich viele Kombinationen gibt...Mein Rechner ist seit einer halben Stunde am Rechnen :D