Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
12. Jan 2016
Dann nimm dort doch mal das UpdateFile ganz raus. Damit kannst du dann die Zeit für das Laden bzw. den internen Aufbau des TMemIniFile messen, denn geschrieben wird dann ja nicht. Wie unterscheiden sich nun die Werte mit und ohne UpdateFile?
Wenn du das mal genauer untersuchst, wirst du feststellen, daß die meiste Zeit außerhalb des Aufrufs von UpdateFile verbraucht wird. Es ist ja auch ein...
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
12. Jan 2016
Hier nochmal eine Version, die auch die Alternative mit dem zweifachen Speichern berücksichtigt. Die Laufzeiten sind erwartungsgemäß etwa doppelt so lang wie bei einem originalen TMemIniFile.
program Project53;
{$APPTYPE CONSOLE}
uses
System.SysUtils,
System.Diagnostics,
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
12. Jan 2016
Nicht wirklich! Du prüfst die Geschwindigkeit deiner Code-Sequenz, die im Wesentlichen wohl durch die 1000 Aufrufe von RandomPassword und das Anlegen der internen Struktur für TMemInifile beeinflusst wird wird, mit einer Messmethode, die auf ca. 1/18 Sekunde genau auflöst. Du kannst das gerne mal ausprobieren, in dem du die das UpdateFile weglässt und den Rest mal mit und ohne vorhandener...
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
11. Jan 2016
Wäre da nicht dieser Hinweis (TxF = Transactional NTFS):
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
11. Jan 2016
Den Eindruck habe ich mittlerweile aber auch...
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
10. Jan 2016
Ich schon, aber das hängt natürlich stark davon ab, was du "viel mehr" nennst und wie groß die INI-Datei ist. Für den Benutzer wird das bei einer handlichen INI-Datei nicht bemerkbar sein. Bei einem Speedtest wirst du einen Faktor von knapp 2 messen können.
Na, dann...
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
10. Jan 2016
Ist aber deutlich weniger performant, da das Umbenennen selbst kein Schreiben der Datei erfordert, aber das Kopieren der alten Datei schon. Insbesondere da beim nachfolgenden UpdateFile ja die alte Datei eh überschrieben wird (was minimalst langsamer ist, als wenn die alte Datei gar nicht da wäre).
Im Moment kann ich keinen besseren, schnelleren und sichereren Ansatz erkennen, als den von mir...
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
10. Jan 2016
Performanteres als das wirst du kaum finden. Bei UpdateFile wird immer eine neue Datei erzeugt und damit eine eventuell bestehende gelöscht. Das Umbenennen der Datei verbraucht auch kaum Zeit, da es ausschließlich im Verzeichniseintrag stattfindet und die Datei selbst gar nicht angefasst wird.
Und das Schönste: es ist so stumpf einfach, daß man auch nach Jahren noch versteht, was da passiert.
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
10. Jan 2016
Und worin unterscheidet sich das jetzt von meinem Vorschlag :gruebel:
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
9. Jan 2016
Du kannst in deiner Ableitung von TMemIniFile das UpdateFile überschreiben. Dort benennst du die aktuelle Ini-Datei um, z.B. in <wasauchimmer>.sav, rufst dann das inherited auf und wenn das sauber zurück kommt, kannst du die sav-Datei löschen.
Beim Create schaust du, ob die INI-Datei existiert (und vielleicht noch, ob sie nicht leer ist). Andernfalls suchst du nach einer sav-Datei und benennst...
Forum: Object-Pascal / Delphi-Language
Delphi
by Uwe Raabe,
9. Jan 2016
In D10 Seattle ruft TMemInifile.Destroy jedenfalls immer noch kein UpdateFile auf.