Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fortschritt beim Speichern in Gauge darstellen (https://www.delphipraxis.net/121485-fortschritt-beim-speichern-gauge-darstellen.html)

DeathsShadow 28. Sep 2008 20:09


Fortschritt beim Speichern in Gauge darstellen
 
Hallo ihr :hi:
ich habe ein Programm geschrieben mit dem ich Keys für meine Programme generiere kann.
Es generiertzunächst die angegebene Anzahl an Keys, dann überprüft es die doppelten und löscht sie. 8)

Im nächsten Schritt kann ma die Keys in einer InI-Datei speichern.
hier der code:

Delphi-Quellcode:
var
  IniPath, SP_Name : String;
begin
  SP_Name := ' - '+E_00_Name.Text;
  IniPath := ChangeFileExt(Paramstr(0), SP_Name+'.ini');
  if SaveListBoxToIni(IniPath, 'ListBox1', ListBox1.Items) then
    ShowMessage('Gespeichert!');
end;
Allerdings dauert dies bei ca 100.000 Keys seeeehr lange :( , deswegen wollte ich nun den speicherfortschritt darstellen. Aber wie stelle ich das in TGauge dar?

Ich hoffe ihr könnt mir helfen, deswegen schon mal vielen dank im vorraus.

MFG Death's Shadow

Luckie 28. Sep 2008 20:12

Re: Fortschritt beim Speichern in Gauge darstellen
 
Nun ja, ohne zu wissen, wie bei dir SaveListBoxToIni aussieht, kann man dir schlecht helfen.

DeathsShadow 28. Sep 2008 20:17

Re: Fortschritt beim Speichern in Gauge darstellen
 
sry .... mein fehler
Delphi-Quellcode:
function SaveListBoxToIni(const IniPath, Section: String;
  List: TStrings): Boolean;
var
  k: Integer;
begin
  with TIniFile.Create(IniPath) do try
    EraseSection(Section);

    for k := 0 to List.Count - 1 do
      WriteString(Section, IntToStr(k), Format('"%s"',[List[k]]));

    Result := True;
  finally Free end;
end;
MFG Death's Shadow

Luckie 28. Sep 2008 20:19

Re: Fortschritt beim Speichern in Gauge darstellen
 
Na da hast du es doch. Erhöhe den Wert von TGauge innerhalb der for-Schleife.

Hawkeye219 28. Sep 2008 21:27

Re: Fortschritt beim Speichern in Gauge darstellen
 
Herzlich willkommen in der Delphi-PRAXiS, DeathsShadow!

Das .ini-Format setzt enge Grenzen bei der Dateigröße und der Größe eines Abschnitts. In diesem Artikel kannst du mehr darüber erfahren.

Wenn du wirklich 100000 Einträge ablegen möchtest, solltest du dich nach Alternativen umsehen. Selbst bei der Verwendung von Delphi-Referenz durchsuchenTMemIniFile kannst du ohne einige Tricks keine akzeptablen Laufzeiten beim Schreiben erreichen.

Gruß Hawkeye

sx2008 28. Sep 2008 22:33

Re: Fortschritt beim Speichern in Gauge darstellen
 
Wenn du eine TStringList verwendest, dauert das Speichern mit SaveToFile() von 100000 Zeilen mit "Keys" weniger als eine Sekunde.
Der Unterschied in der Zugriffsgeschwindigkeit zwischen [TListBox].Items und TStringList liegt mal ganz grob bei 1:100.
Der Grund ist, dass bei [TListBox].Items für jeden Eintrag eine Windows Message verschickt wird und damit um Welten langsamer ist, als bei TStringList mit dem direkten Zugriff auf den RAM.
Du hast jetzt 2. Möglichkeiten:
a.) wie geplant einen Progressbar einbauen und den Benutzer warten lassen
b.) mit TStringList arbeiten und die Speicherzeit so drastisch reduzieren, dass der Progressbar überflüssig wird

alzaimar 29. Sep 2008 06:56

Re: Fortschritt beim Speichern in Gauge darstellen
 
Was haben denn 100.000 Einträge in einer ListBox zu suchen? :shock: Erwartest Du im Ernst, das irgendwer die 100.000 Einträge durchscrollt?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz