AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FastIniFiles Memory Leaks

Ein Thema von API · begonnen am 22. Nov 2009 · letzter Beitrag vom 19. Feb 2010
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#11

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 11:33
man kann das mit With machen, aber man sollte schon den richtigen Desktructor nutzen

Zitat von API:
@hoika: auch nach ändern durch inherited Destroy; geht der Leak nicht weg.
man überschreibt nicht Free, sondern Destroy



Delphi-Quellcode:
destructor TFIniSection.Destroy; // in der Definition mit OVERRIDE;
var
  i: Integer;
begin
  Name := '';
  Finalize(Values);
  inherited;
end;
$2B or not $2B
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 11:40
Hallo,

Free wird zwar aufgerufen,
der Destructor heisst aber Destroy.

Mit dem with stimmt wie oben.

Was spricht gegeben

FIniFile:=
with FIniFile

Ausserdem verstehe ich nicht,
warum man heutzutage noch IniFiles benutzt ...


Heiko
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 11:42
Hallo,

zeig doch noch mal den Leak-Code (fastmm).


Heiko
Heiko
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#14

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 12:08
Zitat von hoika:
Hallo,
zeig doch noch mal den Leak-Code (fastmm).
Heiko
http://codepaste.net/78msi9
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#15

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 12:40
Hallo,

hast du die unit überarbeitet (Free->Destroy override) ?

Der Programmierer der Unit hat die leaks "eingebaut".



Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#16

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 12:58
FastIniFile + MemeoryLeak http://en.wikipedia.org/wiki/Space-time_tradeoff
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 13:10
Delphi-Quellcode:
  TFIniEntry = class
    public
      // Markiert den Wert zum löschen, d.h. er wird nicht geschrieben
      Deleted: Boolean;
      constructor Create;
  end;

  TFIniFile = class
    private
      // Sektionen in der Datei
      Entries: array of TFIniEntry;
      // Index der geöffneten Sektion
      CurrentSection: Integer;
Delphi-Quellcode:
destructor TFIniFile.Free(SaveChanges: Boolean = true);
begin
  if isChanged and SaveChanges then Save;
  Finalize(Entries);
  inherited Destroy;
end;
Ich denke, dass Finalize nur das dyn Array dereferenziert aber
nicht die Instanzen von TFIniEntry freigibt.
Dazu müßte vorher durch das Array iteriert werden und die Instanzen
freigeben werden.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#18

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 13:17
Hallo,

Einspruch.

Lese ich mir die Hilfe zu Finalize durch,
macht sie genau so, was sie soll.

Aber ein
Entries.Dispose;

geht hier doch auch ?

Noch mal die Frage an den TE,
hast du Free durch Destroy ersetzt ?


Heiko
Heiko
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 13:33
Hallo,

Die Memleaks sind bei

1.
Delphi-Quellcode:
SetLength(Values, Length(Values)+1);
Values[High(Values)] := TFIniValue.Create(Buf1, Buf2);
und 2. bei
Delphi-Quellcode:
SetLength(Entries, Length(Entries)+1);
Entries[High(Entries)] := TFIniSection.Create(Buf);
Warum, darf der Programmierer selber rausfinden.
Ich klink mich aus.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#20

Re: FastIniFiles Memory Leaks

  Alt 22. Nov 2009, 14:01
Joar, man könnte auch die schonmal gestellte Frage aufwerfen:
Warum unbedingt INI?

PS: TMemIniFile und andere schnellere Ini-Varianten gibt es notfalls auch noch.

PSS: Finalize gibt nur das Array, aber nicht die darin enthaltenen Objekte frei.
Finalize gibt allgemein keine Objekte/Pointer frei, sondern nur Strings, DynArrays und Interfaces.

Und wenn ich mir diese Unit so ansehe, dann werden alle intern erstellten Objekte niemals freigegeben.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


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 07:52 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