![]() |
Garbage Collector in Delphi 7
Delphi-Quellcode:
Im Code wird das Handle auf die Datei nicht geschlossen. f ist die einzige Referenz auf die jeweilige Datei. Produziere ich Overhead, oder gibt es alle Handles der vorhergehenden Schleifendurchläufe noch?
for i:= 1 to 5 do
begin AssignFile( f, 'PathToFile' + IntToStr( i ) ); Reset( f ); end; |
AW: Garbage Collector in Delphi 7
Du musst das getrennt machen. Du überschreibst f ja immer. Nutze halt einfach ein Array.
|
AW: Garbage Collector in Delphi 7
Wenn du den Dateizugriff in einem Interface kapselst, dann hast du deinen GC.
Delphi-Quellcode:
AssignFile(f, ''); // oder TFileRec(f).Mode := fmClosed;
for i:= 1 to 5 do begin if TFileRec(f).Mode <> fmClosed then CloseFile(f); AssignFile(f, 'PathToFile' + IntToStr(i)); Reset(f); ... end; if TFileRec(f).Mode <> fmClosed then CloseFile(f);
Delphi-Quellcode:
aber besser doch so
AssignFile(f, ''); // oder TFileRec(f).Mode := fmClosed;
try for i:= 1 to 5 do begin if TFileRec(f).Mode <> fmClosed then CloseFile(f); AssignFile(f, 'PathToFile' + IntToStr(i)); Reset(f); ... end; finally if TFileRec(f).Mode <> fmClosed then CloseFile(f); end;
Delphi-Quellcode:
for i:= 1 to 5 do
begin AssignFile(f, 'PathToFile' + IntToStr(i)); Reset(f); try ... finally CloseFile(f); end; end; |
AW: Garbage Collector in Delphi 7
Ok. Anders gefragt. (himitsu's Beitrag inzwischen gelesen)
Muss ich die Handles zwingend mit CloseFile( ) schließen oder ist das egal, wenn ich f, also die Referenz, durch eine Neuzuweisung auflöse? |
AW: Garbage Collector in Delphi 7
Du solltest die Handle immer schliessen
|
AW: Garbage Collector in Delphi 7
Danke sehr.
Problem gelöst. |
AW: Garbage Collector in Delphi 7
AssignFile prüft nicht, ob schon eine Datei mit dieser Variable geöffnet wurde.
Das ist auch nicht möglich, da der FileRecord nicht automatisch initialisiert wird. AssignFile überschreibt also einfach den Record und das "alte" Dateihandle, aber es schließt diese Datei nicht. Das Handle würde also, unter WinNT+ zumindestens, erst beim Beenden des Programms geschlossen, wenn du es nicht selber schließt. |
AW: Garbage Collector in Delphi 7
Es gibt noch ein kleines Problem,
ohne fileClose werden die internen Puffer nicht gelehrt, es kann also sein, das nicht alle Daten in der Datei landen, wenn man schreibt. (über Stil-Fragen wird hier ja nicht diskutiert?) Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17: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