![]() |
Wie wichtig ist FREE?
Hallo,
ich wollte fragen, wie wichtig es ist, ein Textdokument in einer Memo nach dem Speichern mit free zu lösen? Braucht man das wenn 2 Leute gleichzeitig auf das Dokument speichernd zugreifen? Danke. |
Re: Wie wichtig ist FREE?
Das Free hat nichts mit dem Speichern einer Datei zu tun, sondern mit dem Freigeben des für das Objekt angeforderten Speichers.
|
Re: Wie wichtig ist FREE?
Und wann genau braucht man das?
|
Re: Wie wichtig ist FREE?
Wenn du das Objekt nicht mehr benötigst.
Ist wie zu Hause mit dem Aufräumen ... man kann aber man muss nicht, allerdings hat es Vorteile ;) Nicht Aufräumen -> kann zum Chaos führen (Messie) Nicht FREE -> kann zum Speicherüberlauf führen |
Re: Wie wichtig ist FREE?
Du solltest angeforderten Speicher sobald wie möglich wieder freigeben. Ein Beispiel:
Delphi-Quellcode:
procedure TFormWuppdi.Tuwas;
var aList: TStringList; begin aList := TStringList.Create; try //mach was mit der Liste finally aList.Free; //Liste auf jeden Fall freigeben end; //weiterer Code, bei dem die Liste nicht gebraucht wird end; |
Re: Wie wichtig ist FREE?
Macht das SInn, wenn auf diese Datei alle 2 Minuten zugegriffen wird? Sollta man sie dann trotzdem immer Freigeben?
|
Re: Wie wichtig ist FREE?
Solange das Objekt benötigt wird muss du es nicht immer wieder freigeben und neu erzeugen. Du musst allerdings sicher sein das Objekt irgendwann wieder freigegeben wird! Wenn du z.B eine StringListe hast die du immer wieder brauchst könntest du sie beim starten des programmes erzeugen und erst am ende wieder freigeben. Vielleicht ne dämliche Frage, aber wenn ich ein programm mit dem taskmanager abschiesse wird der speicher aller objekte dieses programmes doch freigegeben?
|
Re: Wie wichtig ist FREE?
Primär benötigst du erstmal etwas um diese konkurrierenden Schreibzugriffe zu steuern ... !
Um in eine Textdatei etwas zu speichern verfährst du am besten so:
Delphi-Quellcode:
Bei so einem Zugriff habe ich nix mit einem Objekt zu tun, also auch nix mit FREE am Hut.
var
MeineDatei : Text; begin AssignFile( MeineDatei, 'C:\Daten\MeineDatei.txt' ); AppendFile( MeineDatei ); WriteLn( MeineDatei, 'Ich will auch mal' ); CloseFile( MeineDatei ); end; Hier wird jetzt die Datei zum Anhängen geöffnet und nach dem Schreiben sofort wieder geschlossen. Was noch nicht passiert, ist die Abfrage, ob auf diese Datei überhaupt schreibend zugegriffen werden kann, dieses müsstest du noch einbauen. Wie man das macht, findest du eigentlich auch hier im Forum. cu Oliver |
Re: Wie wichtig ist FREE?
Zitat:
cu Oliver |
Re: Wie wichtig ist FREE?
ääähhhhhh (verwirrt) -
kann es sein, dass das "file", das bei "append" zu viel ist, bei "text" fehlt?? |
Re: Wie wichtig ist FREE?
ja, ja :mrgreen: habe ich nur so auf die Schnelle zusammengetippt
|
Re: Wie wichtig ist FREE?
Das sag ich in solchen Fällen auch immer :mrgreen:
|
Re: Wie wichtig ist FREE?
hier noch ein kleiner Tipp. Schreibe immer folgende Zeile in der Projektdatei hinzu:
Delphi-Quellcode:
Damit bekommst du beim Programm ende ein kleine Meldung angezeigt wenn du mal vergessen hast etwas freizugeben.
ReportMemoryLeaksOnShutdown := true; <-- Diese hier
Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; Zitat:
|
Re: Wie wichtig ist FREE?
Free ist solange egal, bis in 32bit Anwendungen der 2GB Speicher reicht. Windows gibt am Ende eh den Anwendungsspeicher frei.
Wenn deine Anwendung auf 64bit läuft ist das fast egal. Da ist der verbaute Speicher die Grenze. |
Re: Wie wichtig ist FREE?
Zitat:
|
Re: Wie wichtig ist FREE?
Zitat:
|
Re: Wie wichtig ist FREE?
Das Betriebssystem hat bei 64-Bit-Adressierung allerdings die Möglichkeit, eine ganze Menge auf die Platte auszulagern. Wenn die Platte zulässt, weit mehr als nur die 100GB.
|
Re: Wie wichtig ist FREE?
das wird aber extrem langsam wenn du nicht gerade ein 1000 euro teuren flash speicher hast :stupid:
|
Re: Wie wichtig ist FREE?
Zitat:
|
Re: Wie wichtig ist FREE?
Zitat:
Nichtsdestotrotz ist der Adressraum pro Prozess eben begrenzt und man sollte schon dafür sorgen, dass nicht mehr benötigter Speicher wieder freigegeben wird. Es geht ja nicht immer nur um den absoluten frien Speicher, sondern auch um zusammenhängenden Speicher. Wenn ich ein dynamisches Array initialisiere und nicht genug zusammenhängender Speicher alloziiert werden kann, ist auch Ende. Und da ist es egal, wie groß der Adressraum ist. Wenn bei 64-Bit der Speicher ungünstig belegt wird, kann es auch da passieren, dass nicht genug zusammenhänmgender Speicher zur Verfügung steht. Ausserdem ist es sauberer Stil, seinen Speicher wieder selbst frei zu geben. Will man sich darum nicht kümmern müssen, dann muss man eine Sprache benutzen, die eine Garbagecollection besitzt und sich selber um das Freigeben kümmert. Aber um auf die Ausgangsfrage zurückzukommen eine Gegenfrage: "Wie wichtig ist es den Müllereimer zu leeren?" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20: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-2025 by Thomas Breitkreuz