![]() |
Strings extrem schnell speichern und laden
Moin,
Ich habe hier mal wieder ein Problem: Wie kann ich eine Reihe an Strings möglichst schnell aus einer Datei laden (das Speichern muss nicht ganz so schnell erfolgen)? Ist ein binäres Dateiformat der beste Weg? Für mich kommen auch keine Third-Party-Libraries bzw. Dlls und dergleichen in Frage. Weitere Informationen:
Welche Methode könnt ihr empfehlen? Danke & Grüße, Max |
Re: Strings extrem schnell speichern und laden
Ich würde an den Anfang der Datei eine einfache Tabelle schreiben, die jedem Stringbezeichner den Offset innerhalb der Datei und die Länge des Strings zuordnet. Daraus kannst du dann eine Hashmap erstellen, die du ständig im RAM hast. Wenn du jetzt einen String laden willst, schaust du in deiner Hashtabelle nach, suchst den passenden Offset und liest einen String der gefundenen Länge aus. Wenn du nicht "vorhersehen" kannst, ob du auch noch andere Strings aus der Gegend brauchen kannst, dürfte es nicht schneller gehen.
Bei Andorra ist glaube ich ein gepufferter Dateistream dabei, der vor allem bei großen Dateien extrem schnell ist - wie es mit Speicherverbrauch aussieht, weiß ich nicht genau. Wie groß sind denn deine Dateien, dass du dir um Speicherverbrauch sorgen machst? Eine sinnvolle Alternative zu diesem doch recht umständlichen Vorgehen wäre eine Datenbank, die Dinger sind extrem schnell und fressen auch nicht so viel Speicher - das wäre meine Lösung, wenn es wirklich um große Datenmengen geht. |
Re: Strings extrem schnell speichern und laden
Moin,
Die Datenmengen sind in der Regel klein (höchstens ein paar Megabyte). Ich will lediglich so schnell (!) und so schonend wie möglich arbeiten. Das mit der Hashmap habe ich jedoch nicht wirklich verstanden, wie genau meinst du das? Achja: Habt ihr vielleicht noch weitere Literatur wie man solche Dateiformate am besten aufbaut (ich habe sowas bisher noch nie gemacht)? Danke & Grüße, Max |
Re: Strings extrem schnell speichern und laden
Zitat:
|
Re: Strings extrem schnell speichern und laden
Zitat:
Ein Hash (z.B. als Interger) läßt sich schneller suchen/vergleichen, als ein ganzer String. und beim Suchen in soeiner Liste wird dann sozusagen erstmal aus dem Such-Identifier ein Hash erstellt und dieser dann schön schnell gesucht. |
Re: Strings extrem schnell speichern und laden
Der Hash-Wert wird dabei jedoch als Index verwendet, um die Suche noch weiter zu optimieren. Hier von einer 'Liste' zu sprechen, ist falsch. Eine Hashmap ist eine extrem effiziente Datenstruktur zum speichern und finden von Name/Value-Paaren. Näheres
![]() Ich würde doch RAM spendieren, um einen MRU-Cache vorzuschalten. Dann werden oft benötigte Strings im Speicher gehalten, der Zugriff geht dann noch wesentlich schneller. |
Re: Strings extrem schnell speichern und laden
Wenn es nur ein paar Megabyte sind, kannst du die Dinger problemlos komplett im Speicher ablegen. ;)
|
Re: Strings extrem schnell speichern und laden
Zitat:
Denn Vorbeugen ist besser als auf die Schuhe :kotz: cu Oliver |
Re: Strings extrem schnell speichern und laden
@3_of_8: Das habe ich mich noch nicht mal getraut, zu erwähnen. :mrgreen:
@Rufo: Deshalb ein Cache. Bei der Dateistruktur ist es allerdings nicht trivial, denn wenn man 3_of_8's Vorschlag aufgreift, müsste man die komplette Datei jeweils neu schreiben, und das wäre etwas unperformant. |
Re: Strings extrem schnell speichern und laden
Wie sieht es hier eigentlich mit MMFs aus? Gibt es da Performance-Einbußen gegenüber normalem Datei-IO? Das Problem mit dem Schreiben wäre damit zumindest gelöst, wenn man sich eine vernünftige Datenstruktur ausdenkt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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