Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Ini Speichern dauert lange!! (https://www.delphipraxis.net/21812-ini-speichern-dauert-lange.html)

Wadim 8. Mai 2004 16:49


Ini Speichern dauert lange!!
 
hi,

ich hab folgendes problem, und zwar hab ich mir eine datenbank gebastellt wo sachen in ein listview eintragen kann, bearbeiten und löschen, also alles was dazugehört.

nun das klapt zwar aber wenn ich dann die einträge speichern will dann dauert das erstmal eine weile und zweitens das programm schmiert mir dann am ende ab, zwar nicht ganz aber ich kann das fenster dann nicht mehr schließen - jedoch auch nur wenn ich nach dem speichert den befehl close gebe!!

hier mal der quellcode den ich verwende:
Delphi-Quellcode:
//hier oben ist noch was....
    a := listview1.Items.Count;
    b := 0;
    while b <= (a-1) do
      begin
        with TIniFile.Create((ExtractFilePath(ParamStr(0))+'Dateiname')) do
          try
            WriteString('eintrag1','Irgendwas' + inttostr(b), listview1.Items.Item[b].Caption);
            WriteString('eintrag2','Irgendwas'+ inttostr (b),listview1.Items.Item[b].SubItems.Strings[0]);
            WriteString('eintrag3','Irgendwas'+ inttostr (b),listview1.Items.Item[b].SubItems.Strings[1]);
            WriteString('eintrag4','Irgendwas'+ inttostr (b),listview1.Items.Item[b].SubItems.Strings[2]);
            writeinteger('index','count',a-1);
            b := b+1;
          finally
            free;
          end;
      end;
  end;
close;
//...darum ist hier unten auch ein end zuviel
kann man da was optimieren?? - wichtig ist mir eigentlich das, das programm danach nicht abstürzt - das es bisschen länger dauert ist nicht das schlimmste, sind nur ca. 3-4 sec. bei ca.200 einträge

Bernhard Geyer 8. Mai 2004 17:01

Re: Ini Speichern dauert lange!!
 
1, Windows-Ini-Dateien können maximal 32 (oder warens 64) kByte groß werden.

2, Haben deine Listview1.Items immer 3 Subitems? (wird nicht überprüft)

Ich würde die Delphi-Implementierung BigIni verwenden. Dürfte auch schneller sein und hatt schon bei einigen Entwicklern unerklärliche Fehler beseitigt.

Wadim 8. Mai 2004 17:07

Re: Ini Speichern dauert lange!!
 
Zitat:

Zitat von Bernhard Geyer
1, Windows-Ini-Dateien können maximal 32 (oder warens 64) kByte groß werden.

2, Haben deine Listview1.Items immer 3 Subitems? (wird nicht überprüft)

Ich würde die Delphi-Implementierung BigIni verwenden. Dürfte auch schneller sein und hatt schon bei einigen Entwicklern unerklärliche Fehler beseitigt.

hmm und wie verwende ich bigini??

kannst vielleicht ein kleines beispiel reinposten mit speicher und laden??

oder mus ich einfach nur bei den uses statt inifiles biginifiles eintragen??

Bernhard Geyer 8. Mai 2004 17:09

Re: Ini Speichern dauert lange!!
 
Zitat:

Zitat von Wadim
hmm und wie verwende ich bigini??

Uses-Anweisung anpassen und statt TIniFile TBigIniFile (oder war der Klassenname TBiggerIni) verwenden.
Die Verwendung ist fast 100% Identisch wie bei TIniFile.

Muetze1 8. Mai 2004 17:16

Re: Ini Speichern dauert lange!!
 
Moin!

Und Zeit kostet bei deinem Code vor allem das ständige anlegen und freigeben der INI Klasse. Das ist bei dem gleichen Dateinamen völlig sinnlos, daher lege die Instanz einmal vor der Schleife an und gebe sie nach der Schleife wieder frei.

MfG
Muetze1

Robert_G 8. Mai 2004 18:08

Re: Ini Speichern dauert lange!!
 
Du hast neben dem ständigen Neuerzeugen des Inifiles auch ein paar andere Sachen nicht soooo gut gelöst.
  • Du hast Section und Key vertauscht
  • Warum sollte man die Nummer des Eintrages speichern?
  • Außerdem hattest du für jedes SubItem fixen Code geschrieben, die kann man doch auch in einer Schleife durchlaufen.


Auch wenn sich eigentlich XML zum Speichern eines ListViews anbieten würde, es könnte soo gehen:
Delphi-Quellcode:
var
  i, j             : Integer;
begin
  with TIniFile.Create('c:\Dateiname.ini') do
  try
    with ListView1 do
      for i := 0 to pred(Items.Count) do
        with Items[i] do
        begin
          WriteString('Rec' + IntToStr(succ(i))
                    , 'Col1'
                    , Caption);

          for j := 0 to pred(SubItems.Count) do
            WriteString('Rec' + IntToStr(succ(i))
                      , 'Col' + IntToStr(j + 2)
                      , SubItems[j]);
          // Das ist IMHO Schwachfug ;)
          //writeinteger('index', 'count', SubItems.Count);
        end;

  finally
    Free;
  end;
end;

Wadim 8. Mai 2004 18:19

Re: Ini Speichern dauert lange!!
 
jo danke schonmal mit den tipps - werd ich alles morgen ausprobieren :)

das mit:
Delphi-Quellcode:
writeinteger('index', 'count', SubItems.Count);
brauch ich nur um die einträge später wieder zu laden und richtig zusammenzufügen :wink:

mfg wadim

Robert_G 8. Mai 2004 18:39

Re: Ini Speichern dauert lange!!
 
nee, brauchst du nicht!
Wenn du pro zeile eine Section anleegst (und nicht verkehrtrum), dann weißt du doch wieviele Values eine Section hat. ;)

MCXSC 24. Jul 2004 21:41

Re: Ini Speichern dauert lange!!
 
Zitat:

1, Windows-Ini-Dateien können maximal 32 (oder warens 64) kByte groß werden.
Ganz sicher? Meine Datei ist knapp 200 KB groß und funzt perfekt... oder liegt es dara, dass ich die Dateiendung zu .mym geändert habe?

Bernhard Geyer 25. Jul 2004 11:45

Re: Ini Speichern dauert lange!!
 
Zitat:

Zitat von MCXSC
Zitat:

1, Windows-Ini-Dateien können maximal 32 (oder warens 64) kByte groß werden.
Ganz sicher? Meine Datei ist knapp 200 KB groß und funzt perfekt... oder liegt es dara, dass ich die Dateiendung zu .mym geändert habe?

Als ich vor ein paar jahren mit Visual C++ und den Win32-API-Funktionen (unter NT) eine große Ini-Daeti anlegen wollte ging es nicht. Evtl. hat 2000/XP diese Grenze nicht mehr. Aber wenn dein Programm auf allen Win32-BS-Versionen laufen soll, so mußt Du den kleinsten gemeinsamen Nenner berücksichtigen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 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