AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Schleife, IdFtp, Stringlisten, optimieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Schleife, IdFtp, Stringlisten, optimieren?

Ein Thema von gee21 · begonnen am 4. Okt 2017 · letzter Beitrag vom 12. Okt 2017
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Schleife, IdFtp, optimieren?

  Alt 4. Okt 2017, 16:20
Warum erzeugst du in der Schleife jedes mal eine neue Stringliste und wo werden die ganzen Stringlisten wieder freigegeben?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Schleife, IdFtp, optimieren?

  Alt 4. Okt 2017, 16:50
Warum erzeugst du in der Schleife jedes mal eine neue Stringliste und wo werden die ganzen Stringlisten wieder freigegeben?
Ach ja das muss ja nicht sein.
habe es so angepasst.

Delphi-Quellcode:
begin
 //Schauen ob predownload aktiviert ist:
 if form3.CheckBox1.Checked=true then begin
 A:=tstringlist.Create;
 //Progrssbar Max der LadeFORM erhöhen um die Anzahl Einträge in der Local List
 form6.ProgressBar1.Max:=form6.ProgressBar1.Max+local_list.Count-1;

    //Scanne alle Lokalen Einträge durch (Da ja die Local Liste bereits aktualisiert wurde, entspricht sie jetzt der Server Liste)
  for I := 0 to LOCAL_LIST.Count-1 do begin




Ich wollte dann die Stringliste am Schluss der Procedure freigeben.
Aber merkwürdigerweise stürtzt das Programm dann beim starten ab...

Fehlermeldung: Canvas does not allow drawing. Weiss nicht genaus was dies mit der Stringliste zu tun hat. :/

Oder gebe ich die Stringliste falsch frei? Habe es so versucht am ende dieser Procedure: A.Free;
Die Server_List und die Local_list gebe ich nie Frei da sie in vielen anderen Funktionen wieder benötigt wird. oder ist das falsch?
Robert
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Schleife, IdFtp, Stringlisten, optimieren?

  Alt 4. Okt 2017, 18:10
Hallo,
Zitat:
Das ich als Trennzeichen ein "," angebe aber ich es ebenfalls mit " ' " trennen kann..? Was mache ich den da falsch
Da du uns deine ExtractStrings-Methode verschweigst, k.A..
Aber schau dir mal Delimiter und StrictDelimiter bei einer TStringList an. Ohne StrictDelimiter=True, ist ein Leerzeichen als Trenner immer erlaubt.

Zitat:
Aber leider etwas langsam ist
Du musst erst mal herausfinden, wass konkret langsam ist,
z.B. durch Schreiben eines LogFiles (TStringList.AddString mit Datum/Uhrzeit und einen LogText).
Heiko
  Mit Zitat antworten Zitat
CarlAshnikov

Registriert seit: 18. Feb 2011
Ort: Erfurt
108 Beiträge
 
Delphi XE5 Enterprise
 
#4

AW: Schleife, IdFtp, Stringlisten, optimieren?

  Alt 5. Okt 2017, 06:38
Ich könnte mir vorstellen, dass diese ganzen FTP Operationen das Ganze ausbremsen. Vielleicht kann man das beschleunigen indem man nicht jede Datei einzeln behandelt sondern den ganzen Ordner. Man könnte sich auch eine Liste aller Dateien holen und nicht jedes Mal mit Size prüfen.
Sebastian
Das kann ja wohl nicht var sein!
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Schleife, IdFtp, Stringlisten, optimieren?

  Alt 6. Okt 2017, 14:43
Besten Dank für eure Antworten.

Am meisten Zeit benötigen wirklich die FTP Operationen. Ich werde dies mit der Liste testen.
Robert
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.549 Beiträge
 
Delphi 12 Athens
 
#6

AW: Schleife, IdFtp, Stringlisten, optimieren?

  Alt 7. Okt 2017, 06:12
Ja, nur weil etwas langsam ist, kann man da erstmal nichts dadurch verbessern, wenn man das so blos 1-zu-1 in einen Thread verschiebt.
Wird sogar langsamer, da dort dann zusätzlich eine Synchronisierung mit der VCL rein muß.

Aber man könnte das innerhalb der Schleife auf mehrere Threads verteilen und so parallel mehrere Dateien runterladen/entpacken, was schneller werden könnte.
- falls der einzelne Download nicht eh schon die gesamte Bandbreite ausnutzt
- falls das Entpacken nicht die Festplatte auslastet
> da würden die sich parallel natürlich gegenseitig ausbremsen




Zitat:
TipTop funktioniert
Nunja, funktionieren vielleicht, aber da liegt so Einiges im Argen.

Warum ist A eine glöbale Varialbe?
Dass diese StringListe immer wieder neu erzeigt und nie freigegeben wird, wurde schon erwähnt.

Da A eine globale Variable ist, warum hat die dann soo einen extem ungünstigen Namen?
Form1, Form2, Form3 und Form6 .... ähhhhhhhhhhhh

if ... = true then sollte man auch nie machen, also das Vergleichen mit diesen Konstanten.
> if ... then oder if not ... then

Zitat:
if a.Strings[4]='Optional=NEINthen begin
Meinst du nicht eher if a.Values['Optional'] = 'NEINthen begin oder if SameText(a.Values['Optional'], 'NEIN') then begin ,
denn was mag wohl passieren, wenn das mal nicht in Zeile 5 steht oder die Groß-/Kleinschreibung nicht stimmt? (vielleicht auch noch ein Trim mit rein)

Zitat:
Delphi-Quellcode:
except
  Addline('ERROR: Download '+a.Strings[0]+'.zip - Code 963' );
end;
Für solche Fehlerbehandlungen sollte man bestraft werden.
Was ist "Code 963" und sicher, dass es dieser Fehler ist?
Immerhin vernichtest du fahrlässig die eigentliche Fehlerursache, welche in der Exception-Message erwähnt wird, welche du nicht beachtest.

Die Codeformatierung (spezielL die Einrückung) sollte man hier besser nicht erwähnen.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 7. Okt 2017 um 06:16 Uhr)
  Mit Zitat antworten Zitat
gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Schleife, IdFtp, Stringlisten, optimieren?

  Alt 12. Okt 2017, 18:02
Ja, nur weil etwas langsam ist, kann man da erstmal nichts dadurch verbessern, wenn man das so blos 1-zu-1 in einen Thread verschiebt.
Wird sogar langsamer, da dort dann zusätzlich eine Synchronisierung mit der VCL rein muß.

Aber man könnte das innerhalb der Schleife auf mehrere Threads verteilen und so parallel mehrere Dateien runterladen/entpacken, was schneller werden könnte.
- falls der einzelne Download nicht eh schon die gesamte Bandbreite ausnutzt
- falls das Entpacken nicht die Festplatte auslastet
> da würden die sich parallel natürlich gegenseitig ausbremsen




Zitat:
TipTop funktioniert
Nunja, funktionieren vielleicht, aber da liegt so Einiges im Argen.

Warum ist A eine glöbale Varialbe?
Dass diese StringListe immer wieder neu erzeigt und nie freigegeben wird, wurde schon erwähnt.

Da A eine globale Variable ist, warum hat die dann soo einen extem ungünstigen Namen?
Form1, Form2, Form3 und Form6 .... ähhhhhhhhhhhh

if ... = true then sollte man auch nie machen, also das Vergleichen mit diesen Konstanten.
> if ... then oder if not ... then

Zitat:
if a.Strings[4]='Optional=NEINthen begin
Meinst du nicht eher if a.Values['Optional'] = 'NEINthen begin oder if SameText(a.Values['Optional'], 'NEIN') then begin ,
denn was mag wohl passieren, wenn das mal nicht in Zeile 5 steht oder die Groß-/Kleinschreibung nicht stimmt? (vielleicht auch noch ein Trim mit rein)

Zitat:
Delphi-Quellcode:
except
  Addline('ERROR: Download '+a.Strings[0]+'.zip - Code 963' );
end;
Für solche Fehlerbehandlungen sollte man bestraft werden.
Was ist "Code 963" und sicher, dass es dieser Fehler ist?
Immerhin vernichtest du fahrlässig die eigentliche Fehlerursache, welche in der Exception-Message erwähnt wird, welche du nicht beachtest.

Die Codeformatierung (spezielL die Einrückung) sollte man hier besser nicht erwähnen.

Besten Dank für dieses Infos. Das hilft mir sehr weiter.
Ich habe nun alle deine Verbesserungen übernommen und ausprobiert. Funktioniert alles gut.

Das aufteilen der Downloads auf mehrere Threads gibts da ne spezielle Methode wie mann das macht?
Oder kann ich einfach 3 Threads erstellen und diese hintereinander starten? würde es dann nicht probleme geben mit der idftp Komponente?
Robert
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz