Zitat von
marabu:
Hallo Tanja,
dein Hauptspeicherproblem kann ich nicht entdecken, aber die Performanz sollte so nicht sehr berauschend sein. Du solltest prüfen, warum du neben IBDataSet noch IBQuery verwendest, eine Komponente die eher als Migrationshilfe für
BDE-Anwendungen konzipiert ist. Das Commit sieht irgendwie unmotiviert aus, so ganz ohne StartTransaction.
Ich vermute, dass sich ein Großteil der Aufgaben durch eine Implementierung in
SQL Procedure Language erledigen lässt - ohne Speicher- und Performanzprobleme - zumal du die Daten ja bereits in die Datenbank geladen hast.
Wenn du weitermachen willst wie bisher, dann solltest du vielleicht ein paar Prüfpunkte in deinen Code aufnehmen. Auf diese Weise kannst du herausfinden, wie sich der Speicherverbrauch zwischen signifikanten Code-Blöcken entwickelt und ob er in Schleifen ansteigt. Oder ist das Laden der
CSV-Daten über StringList erfolgt und due hast diese Listen nicht freigegeben?
Grüße vom marabu
Hallo Marabu,
ich kann es auch nicht verstehen wo das Problem mit dem Speicher sein soll. Aus Verzweiflung habe ich nun bei jedem Post ein Commit gemacht. Danze ist nun noch langsamer, aber wegen mir kann es eine Tag bei der ersten Version laufen hauptsage es geht. Leider geht das auch nicht.
IBQuery habe ich benutzt um ID´s aus zwei verschieden Tabellen zu bekommen und herrauszufinden, wenn eine Datsatz nicht vorhanden ist, in welcher der zwei Tabellen es fehlt. In der Dritten Tabelle sind die nur die ID´s der beiden Tabellen vorhanden.
An eine Stored prodedure habe ich auch schon mal gedacht, jedoch wird es vermutlich nicht gehen. In einen Feld steht ein Sting, welches ich "zerlegen" muß und je nachden was dort drin steht eine Zahl einfügen. Dazu habe ich die Funktionen Pos,copy und Case of von Delphi benutzt.
An die Prüfpunkte habe ich auch schon mal gedacht, jedoch ob mich das weiterbingt weiß ich auch nicht. Das Problem ist ja bei diesem Code dauert es etlich Zeit, bis es 70.000 Datensätze verarbeitet hat und der Fehler kommt. Das Programm besteht nur aus dieser Schleife.
Die
CSV Datei habe ich mittels Databump übertragen. Das war auch das einzige was funktioniert hat.
Ich beschreibe Dir mal den Aufbau des Files und der Tabellen
File:
Feld1,Fled2,Fled3
Mittels des Feld1 wird eine ID aus der ersten Tabelle geholt
Mittels des Feld2 wird eine ID aus der zweiten Tabelle geholt
In der dritten Tabelle steht nur die ID von Fled1 und Feld2 drin. Des weitern Gibt es ein Feld in den ich einen Zahl eintragen möchte und ein Feld in welches in das aktuelles Datum eintragen möchte. Die zahl muß wie oben beschrieben noch berechnet werden.
Hast du so etwas schon mal mit einer Stored Procedure erledigt ? Wie lange würde es bei einer Stored Prodeure denn Dauern bei ca. 750.000 Datensätze ?
Tanja