Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SetLength(DynArray,0) gibt den speicher nicht frei (https://www.delphipraxis.net/203636-setlength-dynarray-0-gibt-den-speicher-nicht-frei.html)

DelTurbo 6. Mär 2020 14:15

Delphi-Version: 2007

SetLength(DynArray,0) gibt den speicher nicht frei
 
Hi,
ich habe ein Problem. Ich habe einen Record der wie folgt aussieht.
Delphi-Quellcode:
type
  tEmailData = record
    InUse    :Boolean;
    ID       :Integer;
    HTML     :TStringList;
    TXT      :TStringList;
    Subject  :String;
    SendName :String;
end;
var
  EMailData    :array of tEmailData;
Ich setze die länge mir z.b. SetLength(EMailData,100). Wenn ich den nicht mehr brauche möchte ich den Speicher wieder frei haben. Ich durchlaufe dann erst eine Schleife und gebe die TStringList mit .Free wieder frei. Danach mache ich ein SetLength(EMailData,0).

Leider bleibt der speicher belegt. Auch ein EMailDatat:=nil hilft nicht weiter. Belege ich mit z.b. SetLength(EMailData,50) wird neuer Speicher genommen.

Was mache ich falsch. Ich suche schon im Netz 2 Tage lange. Ebenfalls hier im Forum. Ich bekomme es nicht hin das der Speicher wieder freigeben wird.

Vielen Dank im voraus

Stevie 6. Mär 2020 14:18

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Worauf basiert deine Annahme, dass der Speicher nicht freigegeben wird?

DelTurbo 6. Mär 2020 14:21

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Ich sehe das 1. am Taskmanager und irgendwann ist bekomme ich (Wenn ich es ein einer Schleife laufen lasse) Out of Memory.

DieDolly 6. Mär 2020 14:21

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Den Taskmanager kannst du direkt in die Tonne hauen.

DelTurbo 6. Mär 2020 14:26

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Mit dem Proccess Explorer von Sysinternals sehe ich auch das der Speicher nicht mehr Freigeben wird.

DelTurbo 6. Mär 2020 14:32

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Nachtrag: Das gleiche mit Freepascal unter Unix. Überprüft mit htop.

DenkDirNix 6. Mär 2020 14:33

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Die Strings müssen auch per User-Code freigegeben werden.

DelTurbo 6. Mär 2020 14:36

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Zitat:

Zitat von DenkDirNix (Beitrag 1459064)
Die Strings müssen auch per User-Code freigegeben werden.

Wie gebe ich die Frei? Auch mit z.b. SetLength(EMailData[i].Subject,0)?

DieDolly 6. Mär 2020 14:37

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Versuch die Dinger mal mit Dispose vorher freizugeben.

Ich habe auch sowas wie du irgendwo und ich nutze nur Dispose. Danach noch SetLength. Das mit den Strings halte ich für Unsinn.

DenkDirNix 6. Mär 2020 14:38

AW: SetLength(DynArray,0) gibt den speicher nicht frei
 
Nö, ganz billig mit
Code:
Subject := '';
SendName := ''


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:18 Uhr.
Seite 1 von 3  1 23      

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