AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi SetLength(DynArray,0) gibt den speicher nicht frei
Thema durchsuchen
Ansicht
Themen-Optionen

SetLength(DynArray,0) gibt den speicher nicht frei

Ein Thema von DelTurbo · begonnen am 6. Mär 2020 · letzter Beitrag vom 7. Mär 2020
Antwort Antwort
Seite 1 von 3  1 23      
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#1

SetLength(DynArray,0) gibt den speicher nicht frei

  Alt 6. Mär 2020, 15:15
Delphi-Version: 2007
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
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

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

  Alt 6. Mär 2020, 15:18
Worauf basiert deine Annahme, dass der Speicher nicht freigegeben wird?
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#3

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

  Alt 6. Mär 2020, 15:21
Ich sehe das 1. am Taskmanager und irgendwann ist bekomme ich (Wenn ich es ein einer Schleife laufen lasse) Out of Memory.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#4

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

  Alt 6. Mär 2020, 15:21
Den Taskmanager kannst du direkt in die Tonne hauen.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#5

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

  Alt 6. Mär 2020, 15:26
Mit dem Proccess Explorer von Sysinternals sehe ich auch das der Speicher nicht mehr Freigeben wird.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#6

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

  Alt 6. Mär 2020, 15:32
Nachtrag: Das gleiche mit Freepascal unter Unix. Überprüft mit htop.
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DenkDirNix

Registriert seit: 13. Dez 2018
69 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 6. Mär 2020, 15:33
Die Strings müssen auch per User-Code freigegeben werden.
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.212 Beiträge
 
Delphi 2007 Architect
 
#8

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

  Alt 6. Mär 2020, 15:36
Die Strings müssen auch per User-Code freigegeben werden.
Wie gebe ich die Frei? Auch mit z.b. SetLength(EMailData[i].Subject,0)?
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

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

  Alt 6. Mär 2020, 15:37
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.
  Mit Zitat antworten Zitat
DenkDirNix

Registriert seit: 13. Dez 2018
69 Beiträge
 
Delphi 11 Alexandria
 
#10

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

  Alt 6. Mär 2020, 15:38
Nö, ganz billig mit
Code:
Subject := '';
SendName := ''
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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