AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

Ein Thema von Thomas2017 · begonnen am 5. Okt 2017 · letzter Beitrag vom 8. Okt 2017
Antwort Antwort
Seite 1 von 3  1 23      
Thomas2017

Registriert seit: 7. Mär 2017
7 Beiträge
 
#1

Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 13:44
Datenbank: Fierbird embedded • Version: 2.1 • Zugriff über: Interbase
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:
  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');
Lasse ich das Schreiben in die Datenbank weg, tritt der Fehler nicht auf.

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
DataSet1.ApplyUpdates; abgesetzt, hat aber den Fehler nicht abgestellt.

Ferner habe ich
DataSet1.CachedUpdates :=false; ausprobiert, was nach meinem Kenntnisstand bewirken soll, das die Änderungen sofort in die Datenbank geschrieben werden sollen und nicht im
virtuellen Speicher zwischengespeichert werden sollen.
Das hat auch nichts gebracht.


Weiss jemand, woran es liegt und was zu tun ist?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 13:53
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?
Markus Kinzler
  Mit Zitat antworten Zitat
Thomas2017

Registriert seit: 7. Mär 2017
7 Beiträge
 
#3

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 14:12
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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 14:32
Ich habe eine Transaction1 in dem Programm, welche beim Programmstart
aktiv geschaltet wird.
Das bedeutet aber, daß die Transaktion über den gesamten Einfügevorgang aktiv ist, oder? Für den Embedded-Driver, der ja im Kontext deines Prozesses läuft, kann das aber schon mal den Speichertod bedeuten.

Versuch doch mal, die Transaktion vor dem Einfügen zu beenden. Geht es dann?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 14:37
Ich habe testweise alle 1000 Datensätze
DataSet1.ApplyUpdates; abgesetzt, hat aber den Fehler nicht abgestellt.
Vielleicht lieber die Transaction commiten und eine neue starten?
Gruß, Jo
  Mit Zitat antworten Zitat
Thomas2017

Registriert seit: 7. Mär 2017
7 Beiträge
 
#6

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 15:02
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 15:06
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).
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 16:28
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.
Heiko
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 16:33
"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.
Gruß, Jo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Fehler "Zu wenig Arbeitsspeicher" beim Füllen der Datenbank

  Alt 5. Okt 2017, 17:06
Zitat:
um auf einen SQL-Server zugreifen zu können, u.a. werden die Daten ja lokal (in der Exe) gecacht.
Der SQL-Server läuft zudem im Prozessraum der Anwendung.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 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