![]() |
[ORP] Diskussion der Import-Klasse
Liste der Anhänge anzeigen (Anzahl: 2)
(Prolog: Wie einige von euch sicher wissen, arbeite ich momentan an einem
![]() Hi ihr, es ist soweit. Der erste Teilschritt auf dem Weg zum Routenplaner ist geschafft. Dabei handelt es sich um die Klasse, die die XML-Datei verarbeitet, die Daten für die Datenbank aufbereitet und in eine Firebird-Datenbank schreibt. Da mein letztes Delphi-Programm ja schon etwas her ist (tjaja...), wäre es mir ganz lieb, wenn ihr einen Blick auf meine Klassenimplementation werfen könntet. Ich bekommen, wenn ich den Import abbreche (einfach das Programm schließen) eine Exception, außerdem steigt der Speicherverbrauch aus welchen Gründen auch immer während des Imports exorbitant an. Vermutlich gibt es irgendwo ein oder mehrere Speicherlecks, die ich einfach übersehe. Ich habe mich schon mit MemCheck abgemüht, aber nicht wirklich Erfolg gehabt. Vielleicht kann einer von euch damit besser umgehen? Um euch das Testen einfacher zu machen, befindet sich im Anhang eine OSM-Testdatei, die ich ein wenig zusammengestaucht habe. Die Originaldatei ist 25 MB groß, diese nur noch 1,5 MB, beinhaltet aber alles, was man zum Testen brauch'. Außerdem würde die Datenbank eigentlich im Anwendungsdatenverzeichnis des akutellen Nutzers liegen. Für Testzwecke liegt sie jetzt aber im Programmverzeichnis, damit ihr nicht erst durch alle Verzeichnisse springen müsst. Ebenfalls mit dabei ist der Firebird Embedded in der Version 2.1. Zum erfolgreichen kompillieren benötigt ihr noch die ZEOSLib, der Download dazu findet sich ![]() Das Projekt hat ebenfalls schon einen "richtigen" Namen bekommen: ![]() ![]() Ich weiß, dass da noch ein riesiger Berg an Arbeit vor mir liegt, aber mit eurer Hilfe klappt das schon... ;) Noch ein kleiner Hinweis: Die Eingabemaske prüft nicht, ob der eingegebene Pfad korrekt ist. Außerdem wird der Starten-Button nicht deaktiviert. Ich hoffe, ich habe sonst alles beachtet. :stupid: |
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "Object-Pascal / Delphi-Language" nach "Open-Source" verschoben.
Ist ja ein Projekt, dass im Source vorliegt |
Re: [ORP] Diskussion der Import-Klasse
Hi,
ich glaube, deine Schutzverletzung beim Beenden kommt daher:
Delphi-Quellcode:
Ich dächte, dass ist sicherer sollte der Thread noch immer da sein:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin if Assigned(OSMParser) then OSMParser.Destroy; end;
Delphi-Quellcode:
Mehr hab ich nich nicht durchgesehen. Compiling ging auch noch nicht. Bei mir werden die Units ZConnection, ZDataSet angemeckert.
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin if Assigned(OSMParser) then begin OSMParser.Terminate; OSMParser.WaitFor; FreeAndNil(OSMParser); end; end; Gruß oki |
Re: [ORP] Diskussion der Import-Klasse
Speicherlecks und ähnliche Missgeschicke findet man zuverlässig mit
![]() |
Re: [ORP] Diskussion der Import-Klasse
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Zitat:
![]() Das Speicherleck konnte ich nicht komplett beheben, der Speicherverbrauch steigt zwar nicht mehr in den riesen Schritten wie vorher, aber er steigt halt immer noch. Folgende Änderungen habe ich gemacht: ORP_Extractor.pas, Zeile 538, folgendes hinzugefügt:
Delphi-Quellcode:
ORP_Extractor.pas, Zeile 219, folgendes hinzugefügt:
FreeAndNil(fRegAttrExpr);
Delphi-Quellcode:
ORP_Extractor.pas, Zeile 202, folgendes kursiv hinzugefügt
FreeAndNil(fRegEx);
Delphi-Quellcode:
Ich lade oben gleich mal die neue Version hoch. Was mir beim FastMM-Log aufgefallen ist, ist dass der Trace Stack auch über die Funktionen der ZeosLib rüberläuft. :gruebel: Ich hänge den Log mal hier mit an...
while (fRegEx.MatchAgain) and (dwLenStr - dwCurPos > 20) [i]and not Terminated[/i] do
|
Re: [ORP] Diskussion der Import-Klasse
hab jetzt noch nicht seht weit reingesehn, aber schon in der ersten Datei ...
Delphi-Quellcode:
procedure TForm1.UpdateProgressbar(Sender: TObject; Cur: Integer; Max: Int64);
begin ProgressBar1.Max := 100; ProgressBar1.Position := Round((Cur / Max)*100); Form1.Caption := IntToStr(ProgressBar1.Position) + ' % ' + Format('Speed: %3.3f Sec.', [(GetTickCount - Tick)/1000]); end;
Delphi-Quellcode:
// warum war Cur als Integer und Max als Int64?
// bei Dateien über 2 GB wäre Cur wohl etwas überlastet procedure TForm1.UpdateProgressbar(Sender: TObject; const Cur, Max: Int64); begin // kann man auch einmal direkt im OI zuweisen //ProgressBar1.Max := 100; // weiß jetzt nur nicht was schneller ist, // aber vermutlich doch die in der FPU, als emulierten 64-Bit-Operationen ... // hab also nix gesagt ._. ProgressBar1.Position := (Cur * 100) div Max * 100; // wenn eh schon Format da ist, warum nicht gleich weiternutzen ;) Form1.Caption := Format('%d%% Speed: %3.3f Sec.', [ProgressBar1.Position, (GetTickCount - Tick) / 1000]); end; |
Re: [ORP] Diskussion der Import-Klasse
Zitat:
Zitat:
|
Re: [ORP] Diskussion der Import-Klasse
Also die Definition der Callbackprozedur ist schon 'ne Sache aus der Unit. :nerd:
|
Re: [ORP] Diskussion der Import-Klasse
Zitat:
|
Re: [ORP] Diskussion der Import-Klasse
Form1.Caption := Format('%d%% Speed: %3.3f Sec.', [ProgressBar1.Position, (GetTickCount - Tick) / 1000]);
wenn ich sowas schon seh *argh* Caption := Format('%d%% Speed: %3.3f Sec.', [ProgressBar1.Position, (GetTickCount - Tick) / 1000]); self.Caption := Format('%d%% Speed: %3.3f Sec.', [ProgressBar1.Position, (GetTickCount - Tick) / 1000]); was besser gefällt aber ja nicht Form1... warum verwendest du das Testprogramm nicht weiter? super Vorlage für einen Unit-Test oder ein Demo. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 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-2025 by Thomas Breitkreuz