Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Insert-Schleife viel zu langsam (https://www.delphipraxis.net/164838-insert-schleife-viel-zu-langsam.html)

himitsu 7. Dez 2011 09:29

AW: Insert-Schleife viel zu langsam
 
Santa Laus ... ein Sack voller Überraschungen :angle:

Partikelecho 9. Dez 2011 07:18

AW: Insert-Schleife viel zu langsam
 
Na ihr habt ja den sprichwörtlichen Clown verschluckt ;)

Ich habe die Prozedur noch ein bisschen beschleunigen können, nach dem himitsu meinen Knoten im Schlauch entfernt hat.

Zum Thema StringLuder, die StringList wird immer ordnungsgemäß nach ihrem Gebrauch frei gegeben und sie wird nicht gleichzeitig an mehreren Stellen verwendet. Ich habe 3 unterschiedliche Einleseprozesse, welche aber noch ineinander integriert werden sollen. Die StringList hat dann nur noch eine Aufgabe und dann kann ich sie bequem gemäß ihrem Zweck benennen.

Delphi-Quellcode:
procedure TFRM_Main.ReadInInvA;
var
  i, invasize:Integer;
  invaaccessed, invacreated, invamodified:String;
  created, accessed, modified:TDateTime;
begin
  DB_Container.Close;
  DB_Container.Directory := CXBE_InvDir.Text;
  DB_Container.Open;
  TBL_Container.DatabaseName := DB_Container.DatabaseName;
  TBL_Container.TableName := invaname;
  DB_Container.StartTransaction;
  TBL_Container.Open;
  TBL_Container.DisableControls;
  for i := 0 to SL.Count-1 do
  begin
    if GetFileTimes(CXBE_DbDir.Text+'\'+SL[i], created, accessed, modified) then
    begin
      invaaccessed := DateTimeToStr(accessed);
      invacreated := DateTimeToStr(created);
      invamodified := DateTimeToStr(modified);
    end;
    invasize := GetFileSize(CXBE_DbDir.Text+'\'+SL[i]);
    TBL_Container.AppendRecord([null, SL[i], invacreated, invamodified, invaaccessed, invasize]);
  end;
  TBL_Container.EnableControls;
  TBL_Container.Close;
  DB_Container.Commit;
  DB_Container.Close;
end;
Als nächstes sollte ich mir wohl mal über eine einfachere Lösung zum Thema GetFileSize und GetFileTimes machen,
allerdings muss ich mich dazu noch einmal genau belesen.. Sinnvoll wäre es doch eventuell diese Informationen über eine Funktion auszulesen, oder?

Außerdem könnte ich bei AppendRecord genausogut DateTimeToStr(created) usw eintragen, anstatt erst Variablen zu befüllen.

p80286 9. Dez 2011 08:38

AW: Insert-Schleife viel zu langsam
 
Was passiert eigentlich wenn
Delphi-Quellcode:
GetFileTimes
fehlschlägt?

Gruß
K-H

Partikelecho 9. Dez 2011 20:19

AW: Insert-Schleife viel zu langsam
 
Das ist richtig, ich hab bisher noch keine Fehlerbehandlungsroutinen eingebaut. Mir geht es zunächst um die Performance und Logik der wichtigsten Funktionen.
Die Fehlerbehandlung ist aber schon vorgemerkt.

Delphi-Quellcode:
procedure TFRM_Main.ReadInInvA;
var
  i:Integer;
  created, accessed, modified:TDateTime;
begin
...
  for i := 0 to SL.Count-1 do
  begin
    GetFileTimes(CXBE_DbDir.Text+'\'+SL[i], created, accessed, modified);
    TBL_Container.AppendRecord([null, SL[i], DateTimeToStr(created), DateTimeToStr(modified), DateTimeToStr(accessed), GetFileSize(CXBE_DbDir.Text+'\'+SL[i])]);
  end;
...
end;

Furtbichler 10. Dez 2011 05:09

AW: Insert-Schleife viel zu langsam
 
Zitat:

Zitat von Partikelecho (Beitrag 1140673)
Das ist richtig, ich hab bisher noch keine Fehlerbehandlungsroutinen eingebaut.

Gewöhne Dir mal an, das sofort zu implementieren. Langsamer wird es nicht und man hat sofort robusten Code.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.
Seite 2 von 2     12   

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