FTP-Upload sehr langsam

Anfängerfragen zum Programmieren mit PureBasic.
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

FTP-Upload sehr langsam

Beitrag von Rene-RNI »

Hallo leute,

habe mir einen Uploader gebastelt, der funktioniert auch ganz gut,
blos dass der Upload sehr langsam läuft(in gegensatz zu Filezilla).

hier mal der code den ich verwende:

Code: Alles auswählen

Procedure Upload()
  
  Global x = CountGadgetItems(#gad_LV_Uploads)
 
  Debug x
  For i = 0 To x - 1
    stat = i + 1
    
    StatusBarText(#gad_Status, 0, "File " + stat +" von " + x )
    text1$ = GetGadgetItemText(#gad_LV_Uploads, i, 0)
    text2$ = GetGadgetItemText(#gad_LV_Uploads, i, 1)
    text3$ = GetGadgetItemText(#gad_LV_Uploads, i, 2)
    SetGadgetItemColor(#gad_LV_Uploads, i, #PB_Gadget_BackColor, Color($FF,$FF,$00))
    c = Split(text1$, "|" , Woerter())
    Debug "Eintrag:" + i + ", Service:" + text1$ + ", Show:" + text2$ + ", Datei:" + text3$ 
    
  If text1$ = "DE"
    Dir$ = "germanservice"
  ElseIf text1$ = "EN"
    Dir$ = "englishservice"
  ElseIf text1$ = "DT"
    Dir$ = "dutchservice"
  EndIf

  Debug Dir$
  
  If OpenFTP(#FTP, FTPServer$, FTPUser$, FTPPass$)
    If SetFTPDirectory(#FTP, Dir$)
      If SendFTPFile(#FTP, text3$, text2$, #True)
        SizeOfFile.l =  FileSize(text3$)
        SetGadgetAttribute(#gad_PGB_Upload, #PB_ProgressBar_Maximum, SizeOfFile)
        Repeat
          Repeat
          Until (WaitWindowEvent(50) = 0)
          Debug "FTP Progress"+ Str(FTPProgress(#FTP))
          SetGadgetState(#gad_PGB_Upload, FTPProgress(#FTP))
        Until FTPProgress(#FTP) = #PB_FTP_Finished Or FTPProgress(#FTP) = #PB_FTP_Error
          StatusBarText(#gad_Status, 0, "Upload finisched, Next File" )
          SetGadgetItemColor(#gad_LV_Uploads, i, #PB_Gadget_BackColor, Color($00,$FF,$00))
        Else
          SetGadgetItemColor(#gad_LV_Uploads, i, #PB_Gadget_BackColor, Color($FF,$00,$00))
        MessageRequester("ERROR", "Upload failed", #PB_MessageRequester_Ok)
      EndIf
      Else
      MessageRequester("ERROR", "Service not selected", #PB_MessageRequester_Ok)
    EndIf
  Else
    MessageRequester("ERROR", "FTP Connect failed", #PB_MessageRequester_Ok)
  EndIf
    CloseFTP(#FTP)
  Next
  StatusBarText(#gad_Status, 0, "All Uploads finisched" )
EndProcedure
hat da jemand einen vorschlag wie man das beschleunigen kann???

wäre super.

Danke euch schon mal.
Gruß Rene
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: FTP-Upload sehr langsam

Beitrag von ts-soft »

Die äußere Schleife erscheint mir sinnlos, zumindest das dort immer wieder OpenFTP ausgeführt wird.

Das Repead : Until (WaitWindowEvent(50) = 0) würde ich auch anders lösen, total anders.

Und nur so als Anmerkung: FileSize ist Quad und kein Long (sollte dem ganzen aber kein Abbruch tun).

Mehr fällt mir so auf Anhieb nicht auf.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Rene-RNI
Beiträge: 18
Registriert: 10.09.2013 14:32

Re: FTP-Upload sehr langsam

Beitrag von Rene-RNI »

Danke für die schnelle Antwort,

Wie würdest du das mit Until (WaitWindowEvent(50) = 0) denn lösen, hatte vorher immer das Problem dass das Prog auf "keine Rückmeldung" ging.

Das FTPOpen wird nurn ein mal ausgeführt wenn der Upload der z.B. 6 Dateien startet!? oder habe da was falsch??

Gruß Rene
Benutzeravatar
CodeCommander
Beiträge: 213
Registriert: 02.03.2014 16:06

Beitrag von CodeCommander »

@ts-soft Herzlichen Glückwunsch zu deinem 1111. Danke :D

Zum Code von Rene: Warum globalisierst du eine Variable innerhalb einer Prozedur? Ich finde es passt dort nicht hin.

Ist es beabsichtigt das du WaitWindowEvent in deiner Prozedur verwendest? Kann es sein das du außerhalb auch WaitWindowEvent nutzt? Das wäre nicht so gut weil Events dann verschluckt werden können wenn du WaitWindowEvent mehrfach benutzt.
Dein CloseFTP ist in der falschen Position. Du fragst zwar ab ob erfolgreich oder Fehler aber wenn Fehler dann wird CloseFTP trotzdem ausgeführt aber das führt wirklich zu enem Fehler.
Mal schreibst du ein Leerzeichen nach dem Komma und mal nicht. Erstelle bitte einheitlichen Code.
Zuletzt geändert von CodeCommander am 18.01.2015 14:27, insgesamt 1-mal geändert.
~ DELETE ~
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: FTP-Upload sehr langsam

Beitrag von ts-soft »

Rene-RNI hat geschrieben:Danke für die schnelle Antwort,

Wie würdest du das mit Until (WaitWindowEvent(50) = 0) denn lösen, hatte vorher immer das Problem dass das Prog auf "keine Rückmeldung" ging.
Ich würde wahrscheinlich den Code in einen Thread packen, aber das hängt wohl auch vom hier fehlenden Code ab.
Rene-RNI hat geschrieben:Das FTPOpen wird nurn ein mal ausgeführt wenn der Upload der z.B. 6 Dateien startet!? oder habe da was falsch??

Gruß Rene
Die äußere Schleife wird x-mal durchlaufen, je nachdem wieviel Inhalt #gad_LV_Uploads hat.
Genauso viele OpenFTP werden ausgeführt, kann im moment aber nicht feststellen, ob die tatsächlich
nötig sind. Ich nehme eher an, nicht aber dafür fehlt der restliche Source (wie immer nicht ausführbar
und keine Beispiele :mrgreen: )

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: FTP-Upload sehr langsam

Beitrag von NicTheQuick »

Wenn der Code richtig eingerückt wäre, hätte ich glaube ich auch am Anfang gesehen, dass da komplett außen herum noch diese For-Schleife ist. :wink:
Kleiner Tipp: STRG+A und dann STRG+I
Antworten