Entwickler-Ecke
Dateizugriff - ini Datei schneller schreiben
Gausi - Do 03.04.03 20:01
Titel: ini Datei schneller schreiben
Habe ein Programm mit einer ini-Datei, in der ca. 100 Variablen gespeichert werden. Bei Programmende soll die IniDatei aktualisiert werden. Also schreibe ich sämtliche werte in die Datei mit den entsprechenden Funktionen für iniDateien.
Jetzt hab ich mal spasseshalber das Programm von Diskette gestartet.
Das Schreiben der Ini hat da ungefähr 2 Minuten gedauert.
Kann man das schneller machen?
(klar kann man, aber wie?)[/code]
Alibi - Do 03.04.03 20:02
Ohne deinen Quelltext zu sehen schwer zu sagen. Kristallkugeln sind gerade aus.
Gausi - Do 03.04.03 20:22
Ich dachte, das wäre klar, aber gut:
In der onclose procedure der Hauptform steht in etwa so was:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| ini:=tinifile.Create(ChangeFileExt( Application.ExeName, '.INI' )); try ini.writestring('string1','Dieses Thema',string1); ini.writeinteger('int20','anderes Thema',int20); ini.writebool('bool1',und wieder was'',bool1); //insgesamt ca. 100 Werte finally ini.Free; end; |
Hab eben das gemacht, wie man Werte in Inis speichert. Wie die Werte zusatnde kommen, ist dabei doch egal, oder?
Ärgerlich finde ich, dass das scheinbar SEHR lange dauert.
Alibi - Do 03.04.03 20:26
Nein, das war nicht klar, vielleicht hätte es auch woanders dran gelegen.
Aber Inifiles sind langsam, das lässt sich nicht ändern. Bei jedem Aufruf einer Writefunktion wird die gesamte Datei neugeschrieben.
Gausi - Do 03.04.03 20:42
hmm...und da kann man nix dran machen?
Denn dann ist klar, warum das lang dauert: 100 mal ne kleine Textdatei auf Diskette zu schreiben dauert eben.
Dann mach ich das wohl besser so, dass ich die IniDatei "per Hand" selbst komplett neu schreibe. Ist wohl ein bissel mehr Code, aber dann ungefähr 100 mal schneller...
Popov - Do 03.04.03 20:48
@Gausi
TStringList bietet einige Möglichkeiten mit denen man das Arbeiten mit einer Ini simmulieren kann. Guck dir dazu follgende Punkte an:
TStrings.Values
TStrings.Names
TStrings.IndexOfName
Worauf ich hinauswill - du könntest zuerst alle Werte in einer Stringlist speichern und dann die ganze StringList in einem Rutsch sichern.
UGrohne - Do 03.04.03 20:53
Schau doch mal in der Hilfe nach TMemIniFile, die puffert das Ganze im Speicher und dann kannstes (nach meiner Meinung, habs no net verwendet) in einem Rutsch schreiben.
Gruß
Gausi - Do 03.04.03 20:57
die letzten beiden Beiträge gefallen mir ganz gut. Werde mal beides ausprobieren, mit TMemIniFile fang ich an ;-)
Danke für die Hilfe!
Gausi - Fr 04.04.03 14:00
Das mit TMemIniFile klappt wunderbar. Laufwerk A rattert beim beenden des Programms jetzt nur einmal kurz, die Datei wird jetzt einmal geschrieben, nicht mehr 100mal
@Klabautermann: Danke für den Hinweis, aber ich brauchte nur 2mal "ini" durch "memini" ersetzten (einmal bei der deklaration der Variablen, und bei create) und eine Zeile Code hinzufügen (ini.updatefile).
Das hab ich auch so hingekriegt :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!