![]() |
Speicher Freigeben
Hallo,
ich habe folgende Funktion:
Delphi-Quellcode:
Aufgerufen wird diese zB so:
function ExtraColumsStringsDB(firma:string):TStringlist;
var Temp: Array Of TColumn; i: integer; begin Result := TStringList.Create; Temp := GetExtraFields(firma); for i:=0 to high(Temp) do begin result.Add(Temp[i].FieldName ); end; end;
Delphi-Quellcode:
Allerdings ist mir aufgefallen, dass bei dieser Vorgehensweise der verwendete Speicher der Funktion niemals freigegeben werden kann. (FPC hat ja keinen Garbage Collector)
ExtraColumsStringsDB('name').count
Wenn man den Speicher in der Funktion freigeben würde, könnte man den Rückgabewert (TStringlist) ja niemals benutzen. Gibt es irgendeine Möglichkeit diese nicht mehr verwendeten Variablen nach Ausführung der Funktion wieder freizugeben ? Grüße stiftII |
AW: Speicher Freigeben
So was löst man in der Regel, in dem der Aufrufer das Objekt zur Verfügung stellt und es der Routine übergibt.
|
AW: Speicher Freigeben
Mach es doch so, dass eine StringList der Methode übergeben werden muss.
Dann noch überprüfen ob die überhaupt existiert, sie vll. clearen und mit Werten füllen. MfG Alaitoc Edith sagt: "Luckie war schneller". |
AW: Speicher Freigeben
oder den Funktionsnamen so wählen das klar ist das der Aufrufer aufräumen muss. z.B. CreateExtraColumsStrings
|
AW: Speicher Freigeben
Hi,
ich würde das Ganze ein wenig anders angehen (auch wenn schon Antworten da sind, hier die mögliche Lösung):
Delphi-Quellcode:
function ExtraColumsStringsDB(firma:string; const ASL: TStringlist): Boolean;
var Temp: Array Of TColumn; i: integer; begin try Result := True; Temp := GetExtraFields(firma); for i:=0 to high(Temp) do begin ASL.Add(Temp[i].FieldName ); end; except Result := False; end; end; procedure dosomething; var SL:TStringList; begin SL := TStringList.Create; try ExtraColumsStringsDB('EINEFIRMA', SL); finally SL.Free; end; end; |
AW: Speicher Freigeben
Die Liste als Parameter zu übergeben ist trotzdem die bessere Option, da sonst bei mehrfachem Aufruf der Funktion auch mehrere Instanzen erzeugt werden. Wenn man dann nicht jede in einer Variablen speichert und freigibt hat man die schönsten Speicherlecks produziert.
|
AW: Speicher Freigeben
Zitat:
Gruß K-H |
AW: Speicher Freigeben
Zitat:
|
AW: Speicher Freigeben
Zitat:
![]() |
AW: Speicher Freigeben
Und wenn man den Parameter noch als TStrings (statt TStringList) deklariert, kann man sogar so Spielchen machen wie Memo.Lines übergeben...
mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:12 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 by Thomas Breitkreuz