Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Freigeben von Records (https://www.delphipraxis.net/42721-freigeben-von-records.html)

TheMiller 23. Mär 2005 00:29


Freigeben von Records
 
Hey.

habe gerade beim Durchtesten gemerkt, dass mein Programm zunehmend Arbeitsspeicher frisst, je länger ich es benutze. Arbeite mittlerweile viel mit versch. Records. Jetzt schließe ich immer die offenen Record-Dateien, wenn ich eine Form verlasse und öffne sie wieder, wenn ich sie brauche. Muss ich nicht aber doch den Speicher noch freigeben? Dachte so:

Delphi-Quellcode:
datei.free;
Das mag der Compiler aber nicht:

Delphi-Quellcode:
Objekt, Klassentyp oder Record erforderlich
gebe ich

Delphi-Quellcode:
data.free
ein, funzt es auch nicht.

Ist diese Methode überhaupt notwendig, oder gebe ich den Speicher schon frei, indem ich die Datei schließe?

Luckie 23. Mär 2005 00:32

Re: Freigeben von Records
 
Records kan man nicht frei geben. Entweder hält man sie im Speicher (dynamisches Array zum beispiel) oder nicht.

Binärbaum 23. Mär 2005 00:33

Re: Freigeben von Records
 
Um deine Frage beantworten zu können, wäre es hilfreich, wenn du uns verrätst, von welchem Typ datei bzw. data sind.

MfG
Binärbaum

TheMiller 23. Mär 2005 00:34

Re: Freigeben von Records
 
Also kann ich einfach mit CloseFile die Datei bedenkenlos schließen, ohne dass "Überreste" im Speicher bleiben?

Delphi-Quellcode:
Klar: datei: file of TRecord
data: TRecord

Luckie 23. Mär 2005 00:37

Re: Freigeben von Records
 
Delphi-Referenz durchsuchenCloseFile löscht nur die Verknüpfung zur Datei, die mit [oh]AssignFile[oh] angelegt wurde. Du solltest diesbezüglich mal etwas in der Hilfe lesen. Wenn du vorher alle Records in ein dynamisches Array geladen hast, wird das nichts am Speicherverbrauch ändern.

Jetzt erklär uns doch mal näher, was du da machst, sonst ist das hier nur ein Rumgerate ins blaue. :roll:

TheMiller 23. Mär 2005 00:40

Re: Freigeben von Records
 
Ok,

ich habe im FormActive die Prozedure "Assign". Dann lese oder schreibe ich die Daten mit seek, read und write. Wenn ich dann dieses Formular verlasse, habe ich die Prozedur "CloseFile". Ein Array benutze ich garnicht...

Luckie 23. Mär 2005 00:41

Re: Freigeben von Records
 
Dann dürftest du auch nichts mehr im Speicher haben, wenn dein Record, in dem du die Daten einlist, lokal ist.

TheMiller 23. Mär 2005 00:42

Re: Freigeben von Records
 
OK,

dann sage ich mal wieder "danke"

Binärbaum 23. Mär 2005 00:44

Re: Freigeben von Records
 
Die Methode .Free wird z.B. bei TFileStream benötigt, um den Speicher freizugeben.
Bei typisierten Dateien, wie du sie verwendest, gibt es keine Methode Free.
Deswegen vermute ich, dass das Speicherleck irgendwo anders in deinem Programm liegt.

MfG
Binärbaum

Luckie 23. Mär 2005 00:46

Re: Freigeben von Records
 
Zitat:

Zitat von Binärbaum
Die Methode .Free wird z.B. bei TFileStream benötigt, um den Speicher freizugeben.

Aber nur den Speicher für das TFileStream-Objekt! Desweiteren wird noch die Datei geschlossen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 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