Zitat von
xZise:
MemIniFile: Wo ist der unterschied zu IniFIle?
Schau einfach mal in die
OH oder in den Beitrag vom marabu. Der sagt doch da (wenn du auf den link klickst) :
Zitat von
marabu:
Ein Vorteil von TIniFile ist, dass jeder Schreibzugriff sofort zur Persistenz führt. Einer von vielen Nachteilen ist, dass jeder Lesezugriff zu einem Lesen von der Platte führt
Anders gesagt ein TIniFile schreibt sofort alles auf die Platte, womit marabu auch schon die Vorteile genannt hat. Die Festplatte ist aber nun mal um einiges langsamer als dein
RAM und erst recht als deine CPU. Dies gilt auch für die Caches, hier wäre der L2 Cache noch deutlich schneller als dein
RAM und der noch viel schneller als der Plattencachezugriff.
Ein TMemIniFile lädt die Ini einfach in eine THashedStringList und die liegt einfach schon im Speicher. Damit ist nicht jedesmal ein Zugriff auf die Festplatte nötig, das bringt beim nur lesenden Zugriff eine ganze Menge. Beim Schreiben musst du beachten, dass du keine Persistenz hast, bevor du update aufrufst. Natürlich ist es sehr sehr viel perfomanter alle Änderungen in einem Rutsch auf die Platte zu schreiben (genau dafür ist die da), aber wenn zwischendrin dein Rechner ausfällt, Pech).
Was deine Schleife angeht, so kannst du einfacher mit ControlCount und Controls arbeiten. Controlls sind dabei einfach die sichtbaren TComponents (also das was du eh nur suchst), dass könnte also ein paar unnötige Operationen ersparen.
Was das Öffnen und das Schließen der Ini angeht, so glaube ich meinte Hawkeye eigentlich etwas anderes als dein try finally Block.
Delphi-Quellcode:
procedure TfrmMain.FormCreate(Sender: TObject);
Ini := TIniFile.Create(ExtractFilePath(application.exename) + 'settings.ini'); // <- DU ÖFFNEST
try
... // liest
finally
Ini.Free; // <- GIBST FREI
end;
// LEGST NEU AN
with TIniFile.Create(ExtractFilePath(application.exename) + 'settings.ini') do
try
FadeTime := ReadFloat('Settings', 'FadeTime', 3);
FadeOutOnClose := ReadBool('Settings', 'FadeOutOnClose', true);
//EQSet := ReadInteger('Settings', 'EQSet', 0);
Crossfade := ReadBool('Settings', 'Crossfade', true);
finally
Free;
end;