Thema: Delphi Performance im create

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#4

Re: Performance im create

  Alt 2. Aug 2006, 17:14
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;
  Mit Zitat antworten Zitat