[gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: [gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
Ich selbst arbeite hautpsächlich unter WIndows und übersetze nur unter Linux für die Linux User. Einmal, vor ein paar Jahren hatte sich einer beklagt dass da so viele Meldungen beim Beenden in der Konsole erscheinen, dann habe ich mich darum gekümmert die Speicherlecks zu beheben. Den ein oder anderen fehlenden Free hatte ich dann auch gefunden, jedoch gingen die meisten erst mit FreeAndNil weg.
Bei welchen Objekten das jetzt konkret war weis ich nicht mehr. Ich vermute mal TStringList oder TZQuery, die erzeuge ich sehr oft dynamisch für kleine Abfragen zwischendruch.
Irgendwo darüber gelesen habe ich nicht, es ist meine persönliche Erfahrung.
Ich bin mir jetzt auch nicht sicher welches Linux das war, entweder Suse oder Debian in der VBox.
Bei welchen Objekten das jetzt konkret war weis ich nicht mehr. Ich vermute mal TStringList oder TZQuery, die erzeuge ich sehr oft dynamisch für kleine Abfragen zwischendruch.
Irgendwo darüber gelesen habe ich nicht, es ist meine persönliche Erfahrung.
Ich bin mir jetzt auch nicht sicher welches Linux das war, entweder Suse oder Debian in der VBox.
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: [gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
@MmVisual:
Könntest du mal eine Demo hochladen, welche das Problem zeigt?
Könntest du erklären, warum nicht "Free" sondern erst das Nil setzen der Variablen den Speicher frei geben soll?
Mir ist das alles sehr unklar.
Deine Behauptung würde ja auf ein fundamentales, inakzeptables Problem hinweisen.
Könntest du mal eine Demo hochladen, welche das Problem zeigt?
Könntest du erklären, warum nicht "Free" sondern erst das Nil setzen der Variablen den Speicher frei geben soll?
Mir ist das alles sehr unklar.
Deine Behauptung würde ja auf ein fundamentales, inakzeptables Problem hinweisen.
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: [gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
So schnell kann ich das Demo leider nicht bauen, Ich habe gerde zu viel Arbeit.
Ich muss auch erst mal noch ein Demo wegen einem Zeos Bug schreiben, da gibt es recht häufig gulsch in den Strings die in die DB geschrieben werden sobald man ein ° Zeichen im String hat. z.B. "°C/°F"
Ich muss auch erst mal noch ein Demo wegen einem Zeos Bug schreiben, da gibt es recht häufig gulsch in den Strings die in die DB geschrieben werden sobald man ein ° Zeichen im String hat. z.B. "°C/°F"
EleLa - Elektronik Lagerverwaltung - www.elela.de
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: [gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
Das ist definitiv nicht so, daß FreeAndNil nötig ist.
Aber
Letzenendes macht FreeAndNil(mc) nichts anderes als
und dadurch würde der nachfolgende Vergleich if mc <> nil nicht dazu führen, daß mc.machwasschoenes aufgerufen wird.
Aber
Code: Alles auswählen
procedure TForm1.Button1Click(Sender : TObject);
var
mc : TMyClass;
begin
mc := TMyClass.Create;
mc.MachWasSchoenes;
mc.Free;
if mc <> nil then mc.MachwasSchoenes; // < Hier kracht es weil mc noch immer auf den Speicherbereich zeigt wo vorher die Instanz von TMyClass war.
end;
Code: Alles auswählen
mc.Free;
mc := nil;
Re: [gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
Es gibt immer wieder Diskussionen über FreeAndNil. Im wesentlichen kann man die Meinungen in zwei Gruppen einteilen: "FreeAndNil ist die Rettung vor Abstürzen" und "FreeAndNil ist schädlich, weil es Fehler verschleiert". Während du zur ersten Gruppe gehörst, würden die Anhänger der zweiten Gruppe sagen: Du greifst auf einen bereits freigegebenen Speicherberich zu. Dadurch dass du den Zeiger darauf auf nil setzen musst, verhinderst du den Absturz - aber der eigentliche Fehler, der Zugriff auf den nicht mehr vorhandenen Speicherbereich, ist schon passiert. Etwas ist an der Struktur deines Programms falsch, dass du überhaupt auf diesen Speicher zugreifst.
-
- Beiträge: 1581
- Registriert: Fr 10. Okt 2008, 23:54
- OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
- CPU-Target: 32/64Bit
Re: [gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
In meinem Programm gibt es in der Tat einige Dinge, die erzeuge ich zur Laufzeit wenn ich diese zum ersten mal benötigt (z.B Form mit Progressbar für eine Warteanzeige).
Bei Destroy wird überprüft ob diese Form da ist (If Assigned() Then ...Free) und ggf. aufgeräumt.
Es wird zu Anfang nicht alles komplett geladen, um die Wartezeit zu verkürzen. Die einzelnen Dinge erst dann nach zu laden (und die ein oder andere Sekunde dann zu Warten) schmerzt weniger als wie wenn man zu Programmstart statt 1 Sekunde dann 5 Sekunden warten muss,
Es ist somit duchraus möglich dass ich in einder der beiden Gruppen gesteckt werden kann.
Bei Destroy wird überprüft ob diese Form da ist (If Assigned() Then ...Free) und ggf. aufgeräumt.
Es wird zu Anfang nicht alles komplett geladen, um die Wartezeit zu verkürzen. Die einzelnen Dinge erst dann nach zu laden (und die ein oder andere Sekunde dann zu Warten) schmerzt weniger als wie wenn man zu Programmstart statt 1 Sekunde dann 5 Sekunden warten muss,
Es ist somit duchraus möglich dass ich in einder der beiden Gruppen gesteckt werden kann.
EleLa - Elektronik Lagerverwaltung - www.elela.de
Re: Wie trennt man eine Datenbank-Verbindung richtig?
Über den Gebrauch von FreeAndNil kann man sicher streiten, mich interessiert aber folgende Aussage, die sich ja auf ein Betriebssystem bezieht:
Ist das was dran, oder ist das Quatsch?
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: [gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
Ich halte es für Quatsch. Free gibt den Speicher frei und FreeAndNil macht das auch und setzt die entsprechende Variable auf nil. Das ist bei allen Bestriebssystemen gleich.
Re: [gelöst] Wie trennt man eine Datenbank-Verbindung richtig?
Das denke ich eigentlich auch.fliegermichl hat geschrieben: Mi 22. Nov 2023, 16:12 Ich halte es für Quatsch. Free gibt den Speicher frei und FreeAndNil macht das auch und setzt die entsprechende Variable auf nil. Das ist bei allen Betriebssystemen gleich.
Aber wenn jemand das Problem nachvollziehbar aufzeigen kann, bin ich immer noch interessiert.