![]() |
Datenbank: Fierbird embedded • Version: 2.1 • Zugriff über: Interbase
Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Hallo,
ich habe mich an einem kleinen Datenbank-Programm versucht und bekomme beim Füllen der Datenbank mit Daten den Fehler "Zu wenig Arbeitsspeicher", nachdem ca. 180 000 Datensätze geschrieben wurden. Eckdaten: Delphi 7 prof. (alle verfügbaren und relevanten Updates von Embarcadero installiert) Bei der Datenbank handelt es sich um eine Firebird-Datenbank (embedded). Ich nutze die Interbase-Komponenten von Delphi 7. Hier der Teil, der den Speicherfehler verursacht: Ich lese aus der Textdatei C:\daten.txt die Daten zeilenweise aus und übertrage sie folgendermaßen in die Datenbank.
Delphi-Quellcode:
Lasse ich das Schreiben in die Datenbank weg, tritt der Fehler nicht auf.
AssignFile(F, 'C:\daten.txt');
reset(F); repeat begin readln(F, temp); x := x + 1; form1.DataSet1.append; form1.DataSet1.Edit; form1.DataSet1.FieldByName('NAME').AsString := temp; end until eof(F); showmessage('...fertig. ' + inttostr(x) + ' Datensätze'); Da es ein 32-Bit-Programm ist, beträgt der maximale (virtuelle) Speicher (da noch nicht erweitert, weil keine Ahnung wie...) 2 GB, der durch das Programm belegt werden kann. Zur Laufzeit werden jedoch "nur" ~500 MB RAM-Speicher belegt. Der Rechner hat satt RAM (32 GB) und es ist auch stets genug freier Speicher vorhanden. Ich habe testweise alle 1000 Datensätze
Delphi-Quellcode:
abgesetzt, hat aber den Fehler nicht abgestellt.
DataSet1.ApplyUpdates;
Ferner habe ich
Delphi-Quellcode:
ausprobiert, was nach meinem Kenntnisstand bewirken soll, das die Änderungen sofort in die Datenbank geschrieben werden sollen und nicht im
DataSet1.CachedUpdates :=false;
virtuellen Speicher zwischengespeichert werden sollen. Das hat auch nichts gebracht. Weiss jemand, woran es liegt und was zu tun ist? |
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Das Edit ist nicht notwendig, da Append direkt in den Editmodus wechselt. Ich würde einen expliziten Post einfügen.
Wie sehen die Transaktionseinstellungen aus? |
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Mit dem Post in der Schleife hat es auch nichts geändert.
Ich habe eine Transaction1 in dem Programm, welche beim Programmstart aktiv geschaltet wird. Die anderen Eigenschaften der Transaction1 habe ich bis auf die Datenbank nicht verändert. Welche Eigenschaften interessieren dich? |
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Zitat:
Versuch doch mal, die Transaktion vor dem Einfügen zu beenden. Geht es dann? |
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Zitat:
|
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Ich habe die Tranaction vor dem Einfügen deaktiviert.
Der Fehler bleibt davon aber unberührt. Wenn die Transaktion nicht active ist, macht es da denn dann in Bezug auf den Fehler überhaupt Sinn, diese zu committen und dann wieder neu zu starten? Ich hatte auch getestet, alle 1000 Datensätze das Dataset zu deactivieren und dann wieder vor dem nächsten Datensatz zu activieren, aber das brachte auch keinen Erfolg. Kann denn der virtuelle Speicher, der durch das Dataset belegt ist, wieder freigegeben werden ähnlich dem free einer stringlist? |
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
In FireBird geht nichts ohne Transaktionen. Selbt reine Lesezugriffe benötigen einen Transaktionskontext.
Führ mal regelmässig einen Commit durch. (Z.B. je 1000 Datensätze). |
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Hallo,
ich würde auf Query umstellen. Wer weiss, wass diese TTable-Dingens im Hintergrund alles anstellt, um auf einen SQL-Server zugreifen zu können, u.a. werden die Daten ja lokal (in der Exe) gecacht. |
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
"auf Query umstellen, wer weiß .." würde ich nicht unbedingt, auch wenn es nicht sicher nicht verkehrt wäre. Aber finde ich trotzdem ein gutes Stichwort:
Falls das Dataset noch an die UI gebunden ist, dann rappelt es natürlich ganz schön. |
AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:49 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 by Thomas Breitkreuz