Entwickler-Ecke
Sonstiges (Delphi) - MySQL- Abfragen füllen Memory
Spatz - Do 17.03.05 14:01
Titel: MySQL- Abfragen füllen Memory
Hallo
Um auf meine MySQL Datenbank zuzugreifen, verwende ich die MySQL.pas von
hier [
http://www.fichtner.net/delphi/mysql.delphi.phtml].
Nun mein Problem: Um Werte aus der DB auszulesen, bekomme ich bei meiner Anfrage einen Pointer (PMySQL) auf das Ergebnisobjekt (TMySQL) zurück. Das Problem hierbei ist nun aber, dass ich nicht weiss, wie ich dieses Objekt wieder aus dem Speicher freigeben kann, denn wenn ich eine Abfrage mit 1000 Resultatzeilen ausführe, so füllt mir dies den Speicher um ca. 5-10mb (und dies jedes Mal!). Irgentwelche Tips, wie ich dies lösen könnte?
Besten Dank
Niho - Mo 18.04.05 22:37
@Spatz:
Nicht mysql_store_result sondern mysql_use_result verwenden. Näheres dazu im MySQL Handbuch.
Tino - Mi 20.04.05 08:10
Moin!
Auf den ersten Blick fallen mir die Funktionen mysql_close und mysql_free_result auf. Hast du dir die schon mal genauer angesehen?
Gruß
Tino
Niho - So 24.04.05 10:16
Tino hat folgendes geschrieben: |
| Auf den ersten Blick fallen mir die Funktionen mysql_close und mysql_free_result auf. Hast du dir die schon mal genauer angesehen? |
Klar muss im Anschluss mit mysql_free_result eine Abfrage wieder freigegeben werden.
Allerdings lädt mysql_store_result erstmal die komplette Abfrage in den Speicher - nutzt also unter Umständen viele Speicher vollkommen unnötig.
mysql_use_result hingegen lädt immer nur einen Teil der Abfrage. Sobald die entsprechenden Records ausgelesen wurden wird der verwendete Speicher automatisch wieder freigegeben und die nächsten Records werden von der Datenbank abgefragt.
Klar muß hierfür die Datenbank Verbindung aufrecht erhalten werden - und es darf auch keine andere Abfrage zwischendurch über diese Connection abgehandelt werden. Aber der große Vorteil ist: Es sind nie alle Daten zur gleichen Zeit im Speicher! Und es werden auch nicht alle Daten sofort geladen - es entsteht also keine größere Wartezeit für den User.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!