![]() |
Re: Flexible(re) Ladeprozedur
Zitat:
Was Du also immer machst ist dreimal kopieren (Lesen aus dem Stream, Schreiben in den temporären Stream und Kopieren des kompletten Stream in den original Stream). Das Du hier ein Stream-Objekt verwendest liegt sicherlich daran, dass Du damit eine flexible Struktur hast, die sich in der Größe anpassen lässt. Mein Änderungsvorschlag wäre hier, dass Du statt dem temporären Stream einfach ein dynamisches Array verwendest. Dieses legst Du eben dynamisch in der Größe an, die Du benötigst. Konvertierst Du ein Array vom Typ X nach Typ X+1, dann kannst Du danach das Array vom Typ X frei geben (es wird nicht mehr benötigt). Das ganze machst Du indem Du finalize aufrufst und die Länge des dyn. Arrays wieder auf 0 setzt. Damit belegst Du dann wirklich nur den Speicher, den Du wirklich benötigst. Die Reihenfolge ist übrigens wirklich finalize und dann setLength(.., 0), hatte ich vorher falschrum gepostet. Damit gewinnst Du einfach nur die Sicherheit des Typs. Es ist eigentlich total analog zu deiner Vorgehensweise, aber vielleicht etwas leichter lesbar als der Umweg über Streams. Natürlich kannst Du auch ein dyn. Array immer in den originalen Stream zurückschreiben (Du brauchst das aber eben nicht!). Damit ersparst Du Dir vorallem das Lesen und Schreiben in einen Stream und arbeitest automatisch auf dem Speicher (da landet ein dyn. Array immer). Zitat:
Zitat:
|
Re: Flexible(re) Ladeprozedur
Hallo,
vorweg erst einmal: warum speicherst Du die Daten nicht in einer XML Datei? Eine andere Möglichkeit sehe ich, indem man die Eckdaten der Struktur ebenfalls im Filestream speichert.
Delphi-Quellcode:
Wenn man jetzt noch per Definition die Struktur TTyp1 niemals verändert, sondern immer nur erweitert, dann braucht man sich beim Einlesen der Daten keine Gedanken machen.type TTyp1 = record ... end; TTyp1Array = Array of TTyp1; a := TTyp1Array; s := SizeOf(TTyp1); l := Length(a); stream := TFilesStream.Create(.... stream.Write(s,SizeOf(a)); stream.Write(l,SizeOf(l)); straem.Write(a,s*l); Die Dateien werden natürlich mit jeder Version größer, aber was geht schon ohne Kompromiss? - arno |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:52 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