Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi BDE-Zwischenspeicherung umgehen ? (https://www.delphipraxis.net/67209-bde-zwischenspeicherung-umgehen.html)

AlphaBug 11. Apr 2006 09:44

Datenbank: Sybase SQL Anywhere • Version: 8.0.3 • Zugriff über: BDE / TQuery

BDE-Zwischenspeicherung umgehen ?
 
Hallo,

ich suche nach einer Möglichkeit, die Zwischenspeicherung der BDE, bzw. der BDE-Komponenten zu umgehen.

Ich habe eine Tabelle mit über 40000 Datensätzen, die ich mit der TQuery-Komponente einmal komplett von oben nach unten durchlaufen lassen möchte. Dafür verwende ich die Methode First, eine while-Schleife die auf Eof prüft, sowie die Mehode Next. Benötigt wird nur der jeweils aktuelle Datensatz. Leider werden die bereits durchlaufenen Datensätze im Arbeitsspeicher zwischengespeichert.

Wenn ich die Eigenschaft RequestLive auf True setze,
werden ca. 10Sek. und etwa 150MB RAM benötigt (Der reine Datenbestand sind exportiert ca. 25MB).

Wenn ich die Eigenschaft RequestLive dagegen auf False setze, oder CachedUpdates auf True setze, wird deutlich mehr Zeit und Speicher benötigt (häufig reicht dann der RAM nicht).

Ich benötige jedoch nur den jeweils aktuellen Datensatz.

Gibt es eine Möglichkeit, diese Zwischenspeicherung zu umgehen?

Ich hab zwar nach Möglichkeiten und Alternativen gesucht, aber bisher nichts Passendes gefunden.


Danke im Vorraus.

mquadrat 11. Apr 2006 09:53

Re: BDE-Zwischenspeicherung umgehen ?
 
Solange das DataSet offen ist bleiben die Daten IMHO im Speicher. Das Programm kann ja nicht wissen, dass du nicht doch irgendwann wieder auf den ersten Datensatz springen möchtest.

Langsam aber speicherschonender wäre, wenn du dir nur die 40.000 Primärschlüssel holst und dann jeden Datensatz einzeln lädst. Aber wenn ich recht überlege, wäre das wahrscheinlich ein Performance-Alptraum.

mschaefer 11. Apr 2006 10:10

Re: BDE-Zwischenspeicherung umgehen ?
 
Moin zusammen,

dann nimmt man den Mittelweg. Mach mehrere SQL Abfragen, wo der Schlüsselbereich eingegrenzt ist.
Innerhalb diesr kleineren DataSets kannst Du dann Deine Verfahresweise mit Next und EOF anwenden.
Und oder beschränke die Feldanzahl in der Query auf die Felder die unbedingt bearbeitet werden müssen,
das spart Speicher und Lesezit über das Netz.

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz