![]() |
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); |
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. |
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? |
Re: ObjectList gibt Speicher nicht wieder frei
Zitat:
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 |
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: ![]() 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 17:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz