![]() |
Re: FastIniFiles Memory Leaks
man kann das mit With machen, aber man sollte schon den richtigen Desktructor nutzen
Zitat:
Delphi-Quellcode:
destructor TFIniSection.Destroy; // in der Definition mit OVERRIDE;
var i: Integer; begin Name := ''; Finalize(Values); inherited; end; |
Re: FastIniFiles Memory Leaks
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 |
Re: FastIniFiles Memory Leaks
Hallo,
zeig doch noch mal den Leak-Code (fastmm). Heiko |
Re: FastIniFiles Memory Leaks
Zitat:
![]() |
Re: FastIniFiles Memory Leaks
Hallo,
hast du die unit überarbeitet (Free->Destroy override) ? Der Programmierer der Unit hat die leaks "eingebaut". Heiko |
Re: FastIniFiles Memory Leaks
FastIniFile + MemeoryLeak :arrow:
![]() |
Re: FastIniFiles Memory Leaks
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:
Ich denke, dass Finalize nur das dyn Array dereferenziert aber
destructor TFIniFile.Free(SaveChanges: Boolean = true);
begin if isChanged and SaveChanges then Save; Finalize(Entries); inherited Destroy; end; nicht die Instanzen von TFIniEntry freigibt. Dazu müßte vorher durch das Array iteriert werden und die Instanzen freigeben werden. Grüße Klaus |
Re: FastIniFiles Memory Leaks
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 |
Re: FastIniFiles Memory Leaks
Hallo,
Die Memleaks sind bei 1.
Delphi-Quellcode:
und 2. bei
SetLength(Values, Length(Values)+1);
Values[High(Values)] := TFIniValue.Create(Buf1, Buf2);
Delphi-Quellcode:
Warum, darf der Programmierer selber rausfinden.
SetLength(Entries, Length(Entries)+1);
Entries[High(Entries)] := TFIniSection.Create(Buf); Ich klink mich aus. Heiko |
Re: FastIniFiles Memory Leaks
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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