![]() |
AW: Viele Dateien performant einlesen
Bulkinsert ist eine Verfahren für den schneller Import in einen (MS)SQL-Server.
|
AW: Viele Dateien performant einlesen
Zitat:
Das Einzige was ihn noch einen Hauch schneller machen könnte, ist dann die Behandlung der eingelesenen Daten. Seit Delphi 2009 arbeiten StringStream, StringList und co. noch mit einem zusätzlichem Zwischenschritt, wo das Encoding auf Unicode umgewandelt wird. |
AW: Viele Dateien performant einlesen
Zitat:
|
AW: Viele Dateien performant einlesen
Ich muss zugeben, keine sonderlich ausführlichen Tests gefahren zu haben. Zwei mal
Delphi-Quellcode:
auf die exakt gleiche Datei hintereinander. Das zweite mal geht praktisch sofort. Das meinte ich.
myStringList.ReadFromFile(..)
In den Innereien von
Delphi-Quellcode:
habe ich jetzt nicht gewühlt...
TFileStream
|
AW: Viele Dateien performant einlesen
Ich schlage vor du änderst das Konzept.
Fass die z.B. 5000 Dateien zu einer zusammen, die im ersten Schritt importiert wird. Sollte sich eine der Dateien nachträglich ändern, wird die geänderte Version zusätzlich in das Verzeichnis gespeichert. Im zweiten Schritt werden diese Änderungen importiert. Nützlich ein optionaler dritter Schritt, der die Datei mit allen Änderungen wieder erstellt und die dann überflüssigen Einzeldateien löscht. Alternativ zum Löschen kann man auch mit den Dateiattributen(Archiv) oder Änderungszeitpunkt arbeiten. |
AW: Viele Dateien performant einlesen
Zitat:
Sollte sich eine der Dateien nachträglich ändern, wird die geänderte Version zusätzlich in das Verzeichnis gespeichert. Wenn sich die Dateien immer mal wieder ändern oder neue hinzukommen, würde ich ein ShellNotify auf das Verzeichnis setzen, dann hat man den zeitlichen Aufwand nur beim ersten Mal. Mit dem ShellNotify muss man aber das Konzept nicht mehr ändern. |
AW: Viele Dateien performant einlesen
Schau mal, was passiert, wenn du direkt mit
![]() Da du ja anscheinend weißt, dass deine Dateien <50KB sind, würde ich einfach mal 50KB Puffer reservieren und die Daten (damit möglichst "auf einmal") lesen. Bei einer SSD auch ruhig mal mit 2 Threads parallel testen ob es schneller ist. |
AW: Viele Dateien performant einlesen
Zitat:
Wobei auch TStringList alles auf einmal einliest. (stückchenweise ist denen von Emba und eigentlich fast Allen zu aufwändig :roll:) |
AW: Viele Dateien performant einlesen
Ich hatte mal ein halbwegs vergleichbares Problem. Die Aufgabe war, Text-Dateien der Größe 2-4 GB nach Mustern zu durchsuchen. In einem Moment des Denkverzichts hatte ich versucht eine solche Datei mit Notepad zu öffnen. :oops:
Anschließend habe ich stattdessen Edit++ verwendet. Der konnte "ganz locker" damit umgehen. Mit der FastStr-Bibliothek hats dann auch in meinem Programm sehr gut geklappt. Wenn ich mich recht erinnere lagen die Zeiten für das Lesen & Durchsuchen unter 10 Sekunden. Langer Rede, kurzer Sinn. Ich würde mal versuchen mit Edit++ oder sonst einem vergleichbaren Editor alle Dateien auf einen Rutsch zu öffnen und die Ladezeit (abzüglich einem eventuellen Overhead für den Aufbau der GUI) mit Deinen Zahlen zu vergleichen. Sollte das Ergebnis besser ausfallen, machen diese Editoren womöglich irgendwas anders als ein "TStringList.LoadFromFile" und ich würde das bereits vorgeschlagene Zusammenfassen der kleinen Dateien zu einer großen ernsthaft in Erwägung ziehen. Auch wenn dann weitere oder andere Herausforderungen auf Dich zukommen. Möglich, dass ich hier Äpfel mit Birnen vergleiche, aber vielleicht hilft es ja doch irgendwie. :roll: |
AW: Viele Dateien performant einlesen
ca. 120 MB? LOL ist doch heute nix mehr...
Blockread direkt ins Ram aller Dateien und dann verarbeiten? Mavarik |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 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