AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Arbeitsspeicherproblem beim speichern in TurboDB-Datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

Arbeitsspeicherproblem beim speichern in TurboDB-Datenbank

Ein Thema von Tempdir · begonnen am 18. Mai 2009 · letzter Beitrag vom 20. Mai 2009
Antwort Antwort
Tempdir

Registriert seit: 19. Feb 2009
Ort: Karlsruhe
84 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Arbeitsspeicherproblem beim speichern in TurboDB-Datenbank

  Alt 18. Mai 2009, 15:58
Datenbank: TurboDB • Version: 5.16 • Zugriff über: TurboDB-Komponenten
Hallo,

ich habe mir ein kleines Testprogramm geschrieben, das über eine TDBTable-Komponente permanent Daten in eine TurboDB-Datenbank schreibt. Jetzt beobachte ich beim starten der Applikation dass sie immer mehr und mehr an Arbeitsspeicher benötigt, bis Windows sogar anfängt den Arbeitsspeicher auf der Festplatte auszulagern (das passiert aber erst nach ein paar Tagen Dauerbetrieb)

Mein Code sieht grob gesagt so aus:

Delphi-Quellcode:
for i:=0 to 9999999 do
begin

TdbTable1.Append;

//Fill dataset with data
for a := 2 to (151) do
begin
  //Insert dword data into table field
  TdbTable1.Fields[a-1].AsInteger := i;
end;

//Save dataset to archive-database
TdbTable1.Post;

end;
Was genau ist dafür die Ursache und wie kann ich Abhilfe schaffen? Habe es mal mit TDBTable.Refresh; nach dem .Post probiert, aber hat nichts geholfen.

Besten Dank schonmal!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Arbeitsspeicherproblem beim speichern in TurboDB-Datenba

  Alt 18. Mai 2009, 16:07
Was passiert wenn du zwischenzeitlich die DB-Verbindung schließt?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Tempdir

Registriert seit: 19. Feb 2009
Ort: Karlsruhe
84 Beiträge
 
RAD-Studio 2009 Pro
 
#3

Re: Arbeitsspeicherproblem beim speichern in TurboDB-Datenba

  Alt 18. Mai 2009, 16:10
das kann ich mir aus Performancegründen leider nicht erlauben :/ Aber ich habe es mal getestet, und wie es aussieht benötigt er trotzdem von Zeit zu Zeit immer mehr Arbeitsspeicher.

*edit* es scheint als pendelt er sich doch bei einer Obergrenze ein wenn ich ständig connecte/disconnecte.

*edit2* Wenn mein Programm ein paar Stunden läuft benötigt er 190MB RAM. Setze ich dann alle Table-Komponenten auf Active := FALSE, benötigt er immer noch 190MB. Setze ich sie danach wieder auf TRUE, macht er bei 190MB weiter. Schon komisch...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Arbeitsspeicherproblem beim speichern in TurboDB-Datenba

  Alt 18. Mai 2009, 16:18
dann bau das Programm um das du direkt INSERTS mit prepared Statemens ausführt so das du kein Table-Komponente benötigst.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Tempdir

Registriert seit: 19. Feb 2009
Ort: Karlsruhe
84 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: Arbeitsspeicherproblem beim speichern in TurboDB-Datenba

  Alt 18. Mai 2009, 16:22
du meinst SQL?

Das Programm umzubauen dass es ohne Table-Komponenten läuft wäre ziemlich aufwändig. Aber danke für den Tipp.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Arbeitsspeicherproblem beim speichern in TurboDB-Datenba

  Alt 18. Mai 2009, 16:44
Zitat von Tempdir:
Das Programm umzubauen dass es ohne Table-Komponenten läuft wäre ziemlich aufwändig
So wild ist das nicht.
Nimm einfach zusätzlich eine Query mit auf das Formular.
Die SQL-Abfrage (Property SQL) sieht dann so aus:
SELECT * FROM Tabellennamen WHERE 0=1 Statt TdbTable1 verwendest du den Namen der Query.
Zusätzlich wird alle 1000 Datensätze die Query geschlossen und neu geöffnet.
Dies verhindert den immer weiter zunehmenden Verbrauch an Arbeitsspeicher.
Delphi-Quellcode:
for i:=0 to 9999999 do
begin

if (i mod 1000) = 0 then
begin
  query1.close;
  query1.open;
end;

query1.Append;

//Fill dataset with data
for a := 2 to (151) do
begin
  //Insert dword data into table field
  query1.Fields[a-1].AsInteger := i;
end;

//Save dataset to archive-database
query1.Post;

end;
Ganz klar ist, dass die Verwendung von INSERT-Anweisungen wie in Beitrag #4 empfohlen,
die performanteste und Speicherplatzschonenste Möglichkeit ist,
aber mit obigem Sourcecode klappt es auch ganz gut.
  Mit Zitat antworten Zitat
Tempdir

Registriert seit: 19. Feb 2009
Ort: Karlsruhe
84 Beiträge
 
RAD-Studio 2009 Pro
 
#7

Re: Arbeitsspeicherproblem beim speichern in TurboDB-Datenba

  Alt 18. Mai 2009, 16:50
VIELEN DANK für das Beispiel @ sx2008

Ich hatte früher auch SQL im Einsatz, musste aber leider auf Table-Komponenten der Performance wegen umsteigen. Bei SQL dauerte das Speichern eines Datensatzes ca. 30ms, mit der Table nur <10ms. Das ist schon ein großer Unterschied.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Arbeitsspeicherproblem beim speichern in TurboDB-Datenba

  Alt 18. Mai 2009, 16:53
Zitat von Tempdir:
Ich hatte früher auch SQL im Einsatz, musste aber leider auf Table-Komponenten der Performance wegen umsteigen. Bei SQL dauerte das Speichern eines Datensatzes ca. 30ms, mit der Table nur <10ms. Das ist schon ein großer Unterschied.
Verbesserungen erreichst du durch prepared Statements.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
hoika

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

Re: Arbeitsspeicherproblem beim speichern in TurboDB-Datenba

  Alt 20. Mai 2009, 18:14
Hallo,

was sagt denn memcheck oder fastmm4
-> war gerade vor 2-3 Tagen dran.


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:49 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