Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ObjectList gibt Speicher nicht wieder frei (https://www.delphipraxis.net/135294-objectlist-gibt-speicher-nicht-wieder-frei.html)

karma 8. Jun 2009 17:06


ObjectList gibt Speicher nicht wieder frei
 
Hallo,
ich habe einen Loader für STL-Dateien programmiert, der aus einer STL Datei die Vertices ließt und in einer ObjectList ablegt.
Wenn ich eine neue Datei öffne, leere ich die Liste vorher mit der clear-Methode der Liste, aber laut dem Windows Taskmanager reserviert das Programm immer mehr Speicher. Was mache ich falsch?

Delphi-Quellcode:
type
  vertex = record
    x,y,z:double;
  end;

type //Sollen in der Liste abgelegt werden
  Ttriangle = class(TObject)
    vertices:array[0..2] of vertex;
    normal:vertex;
  end;

//......

vertexlist:TObjectList;

//...

procedure TForm1.FormCreate(Sender: TObject);
begin
  vertexlist:=TObjectList.Create;
  vertexlist.OwnsObjects:=true;
end;

//in der lade-prozedur rufe ich dann zu anfang immer auf:
  vertexlist.Clear;

//zum hinzufügen erst die instanz für jedes dreieck erzeugen
  triangle:=TTriangle.Create;
//mache die zuweisungen und schließlich
vertexlist.Add(triangle);

sirius 8. Jun 2009 17:08

Re: ObjectList gibt Speicher nicht wieder frei
 
Nix machst du falsch. Zwischen deinen Speicheranforderungen und den angaben des Taskmanagers liegen noch der Delphispeichermanager und die Ungenauigkeiten des Taskmanagers.

Ist der Anstieg extrem stark (> +1000%) , dann musst du mal mehr Code posten. an dem hier sehe ich keinen fehler.

karma 8. Jun 2009 17:12

Re: ObjectList gibt Speicher nicht wieder frei
 
Danke für die Antwort!
Wenn ich eine Datei mit paar hunderttausend Vertices lade, nutzt das Programm beim ersten Laden ca. 100MB, beim zweiten ca. 160MB und beim dritten Laden 225MB. Das ist soweit ok?

oki 8. Jun 2009 17:15

Re: ObjectList gibt Speicher nicht wieder frei
 
Zitat:

Zitat von karma
Danke für die Antwort!
Wenn ich eine Datei mit paar hunderttausend Vertices lade, nutzt das Programm beim ersten Laden ca. 100MB, beim zweiten ca. 160MB und beim dritten Laden 225MB. Das ist soweit ok?

das ist nicht ok.

Die Frage ist, wie du mehrere Ladevorgänge schaffst, wenn du das Hinzufügen im FormCreate machst. Ich denke der relevante Code von dir liegt an einer anderen Stelle.

[edit] Sorry, hatte mich verguggt. Poste mal die gesamte Ladefunktion incl. des Teils, wo du deine Objecteinträge erstellst. [/edit]

Gruß oki

karma 8. Jun 2009 19:02

Re: ObjectList gibt Speicher nicht wieder frei
 
Fehler gefunden, ich benutze eine Funktion hier aus dem Forum, die meinen String nach Leerzeichen in Substrings aufteilt und eine Stringlist als result zurückgibt.
Ich würde die Funktion gerne durch "ExtractStrings" aus den Standard-Bibliotheken ersetzen, ich bin mir aber nicht ganz sicher, was mit "Whitespace" gemeint ist:
http://delphi.about.com/library/rtl/...actStrings.htm
Edit: Ok, habs. Kann ich einfach weglassen
Jetzt ist der Speicherverbrauch bei dem File bei 36MB und bleibt da auch nach mehrmaligem Laden :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz