-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
12. Jan 2016
Willst Du damit andeuten, dass nach einem UpdateFile bzw. genauer nach dem darin enthaltenen List.SaveToFile() die Datei noch gar nicht wirklich geschrieben wurde? :o
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
12. Jan 2016
Huiuiui ... 10 Experten, 11 Meinungen. :)
Wenn ich das aktuelle Problem lösen möchte, dann möchte ich das gleich richtig tun. Warum sollte die Performance egal sein? Und warum sollte ich Murphy mehr Freiheiten lassen als nötig?
Diese Code-Sequenz ist in beiden Fällen aber dieselbe. Relevant ist daher nicht die absolute Dauer, sondern die Differenz zwischen mit oder ohne vorhandener...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
12. Jan 2016
Laut Uwe Raabe, nahpets, etc. soll die Variante mit "Backup löschen, Ini verschieben/umbenennen, Ini erzeugen" performanter sein als bei UpdateFile 2xSaveToFile aufzurufen (siehe mein Vorschlag). Ich habe hier nur den dritten Teil davon gemessen. Die anderen beiden Operationen kommen ja noch dazu.
Frag also nicht mich. ;)
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
12. Jan 2016
Ich habe jetzt mal die Geschwindigkeit von TMemIniFile beim Schreiben überprüft.
Getestet habe ich in verschiedenen Konstellationen, aber nachfolgend beispielhaft eine Variante mit Schreiben von 1000 Werten, die jeweils aus 30 zufälligen Zeichen bestehen.
var
ini : TMemIniFile;
i : Integer;
LogDateStart : TDateTime;
begin
LogDateStart := Now;
ini :=...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
11. Jan 2016
Hm, sind meine Bedenken wirklich so daneben? Immerhin versuche ich hier ein Problem zu lösen, das eigentlich gar nicht auftreten dürfte, es aber wohl aufgrund ganz blöder Umstände doch tun kann. Der Vorschlag mit dem Umbenennen beinhaltet aber ja wiederum einen für mich intransparenten Zustand: Was passiert während des Umbenennens? Wenn dieser Befehl intern aus mehreren Teilschritten besteht und...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
10. Jan 2016
Das Datei-Attribut "Erstellt" zeigt immer den Zeitpunkt des ersten Erstellens. Müsste sich dieser dann nicht jedes Mal ändern, wenn die Datei vollständig neu erzeugt wird?
Grundsätzlich gäbe es ja auch noch die Möglichkeit, komplett auf Datei-Operationen zu verzichten und in UpdateFile per 2xSaveToFile stets in zwei Dateien zu schreiben. Bricht der Schreibvorgang beim ersten Schreiben ab, ist...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
10. Jan 2016
Das ist schon klar. :)
Es ging ja erstmal nur um den ersten Teil (der performance-technisch relevantere, da er während der Benutzung ja ggf. sehr oft ausgeführt wird).
Das Wiederherstellen ist imho kein Problem, da nur ein Mal beim Programmstart geprüft werden muss, ob die Datei da ist und nicht leer.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
10. Jan 2016
Spricht etwas dagegen, statt des Umbenennens der Datei bei UpdateFile direkt zu Beginn eine Kopie der aktuellen Datei zu erstellen (immer an der selben Stelle, sodass die Backup-Datei immer überschrieben wird) und anschließend per inherited den normalen Speicherprozess durchzuführen? Das würde jegliche Eventualität umgehen, dass beim Umbenennen etwas schief läuft und erscheint mir nicht...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
10. Jan 2016
Ja, eine solche Lösung habe ich aktuell im Blick.
Ich hatte nur gehofft, dass es eine elegantere und performanetere Lösung gibt, als mit zwei Dateien zu arbeiten. Irgendwas Richtung Schattenkopien, NTFS-Möglichkeiten, wasauchimmer (wenn ich genau wüsste, was die beste Lösung ist, würde ich nicht fragen :stupid: )
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
9. Jan 2016
Ihr habt in dem Punkt recht, sorry. :oops:
Ich setze wie gesagt eine von TMemIniFile abgeleitete Variante ein, wo ich vor langer Zeit den Destructor entsprechend angepasst habe, dass ein Free das UpdateFile auslöst, damit man es nicht jedes Mal selbst ausführen muss. Ich nutze das so selbstverständlich, dass ich tatsächlich vergessen hatte, dass dies normalerweise nicht geschieht. Meine Variante...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
9. Jan 2016
Ich sehe den Zusammenhang zu dem Problem hier nicht. Ich hoffe nicht darauf, dass irgendetwas beim Destroy aufgerufen wird, sondern habe festgestellt, dass es offensichtlich in seltenen Fällen dazu kommen kann, dass der gesamte Ini-Inhalt verloren gehen kann, wenn das Freigeben der Ini unterbrochen wird.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
9. Jan 2016
destructor TIniFile.Destroy;
begin
UpdateFile; // flush changes to disk
inherited Destroy;
end;
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
8. Jan 2016
Unterschiedlich, je nach Verwendung. Sagen wir 10KB - 200KB. Spielt das eine große Rolle?
Ist das ein theoretischer Ansatz oder hast Du das schon irgendwo verwendet/gesehen? Wenn Du da Link oder Codeschnippsel für mich hättest, wäre das toll!
-
Forum: Object-Pascal / Delphi-Language
Delphi
by CodeX,
8. Jan 2016
Ich nutze in meiner Software eine abgeleitete Version von TMemIniFile zum Arbeiten mit Ini-Dateien. Das funktioniert eigentlich auch absolut problemlos. Allerdings gibt es wohl irgendeine Konstellation, die dazu führt, dass der Inhalt der Ini-Datei verloren geht.
Ein Anwender berichtet, dass das bei ihm alle paar Wochen nach dem Neustarten der Fall ist (Software läuft minimiert beim...