Autor Beitrag
snoopyonline
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Fr 14.01.11 13:50 
Ich versuche gerade ein Programm zu scheiben, welches eine Internetseite nach bestimmten Dateien durchsucht und diese dann herunterlädt. Das klappt insgesamt auch schon recht gut - dass einzige was mich noch nicht wirklich überzeugen kann, ist die dabei erzielte Downloadgeschwindigkeit.

Bei Nutzung der "urldownloadtofile" Funktion erreicht das Programm schlappe 150-200 kB/s.
Also hab ich den Download mit den Indy-Komponenten umgesetzt. Mit einem schnörkellosen "IdHTTP.get(...)" (ich weise lediglich Server/URL zu und gebe im IdHTTP.onwork-Ereigniss den Fortschritt bzw. die Durchschnittsgeschwindigkeit aus) erreiche ich immerhin ca. 300 kB/s.

Zum Vergleich: Ein richtiger Downloadmanger (z.B. FDM FreeDownloadManager) kommt beim entsprechenden Zielserver auf ca. 500 kB/s wenn die Datei nur mit einem Segment heruntergeladen wird. Bei mehreren Segmenten je Datei wird die maximale Geschwindigkeit meines Anschlusses (DSL6000) von knapp über 700 kB/s vol ausgenutzt.

Daher meine Frage: gibt es Einstellungen oder andere Wege, bei Indy mehr Geschwindigkeit herauszuholen? Oder muss ich ggf. eine andere (kostenlose!) Komponente nutzen?

Für jegliche Tipps oder Lösungsansätze wäre ich euch dankbar! Hier im Forum gabs irgendwie nur Beiträge zum drosseln der Geschwindigkeit - deren Probleme hätte ich auch gerne... ;-)

P.S.: nutze Delphi 6 PE
Petros
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 131
Erhaltene Danke: 1


Delphi7, Delphi RadStudio 10 Berlin, VSC# 2015, Java 8
BeitragVerfasst: Fr 14.01.11 15:47 
So wie ich das verstanden habe willst du daten von anderen anbietern suchen evtl.
klaun(config.php)oder änliches..

zumindest äußerst du das hier
Zitat:
welches eine Internetseite nach bestimmten Dateien durchsucht und diese dann herunterlädt.


Das Herrunterladen von datein eines Fremdanbietern ohne genehmigung ist verboten, außer er stellt sie dir zum download zur verfügung.

MFG Petros
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 14.01.11 15:55 
Man muss ja nicht immer direkt vom schlimmsten ausgehen, oder? Sinnvolle Verwendungen herfür wären Imagegrabber oder ähnliches.

Den html-Code nach Links zu Bildern zu durchsuchen, diese zu extrahieren und herunter zu laden ist zwar nicht immer unbedingt im Sinne des Seitenbetreibers, aber prinzipiell erstmal nicht verboten.

Zum Thema: Sind die Dateien denn groß genug, damit überhaupt sinnvolle Geschwindigkeitsmessungen möglich sind?

_________________
We are, we were and will not be.
snoopyonline Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Fr 14.01.11 16:20 
Ach waren das noch Zeiten als man - lange ist es her - in einem Forum auf sachlich, technische Beiträge noch sachlich, technische und hilfreiche Antworten bekam...

Nicht jeder der ein Progrämmchen schreibt will damit Daten klauen... Manche - auch das gibt es noch - bezahlen sogar dafür und sind bloß zu faul, sich trotzdem selbst "nen Wolf" zu klicken.
Soviel zu dem Thema...

@Gausi: Die betreffenden Dateigrößen variieren zwischen 5 und 100 MB - auf die Geschwindigkeit kommt es also in der Tat an...

Und ganz nebenbei - bevor demnächst auch noch der Sinn meines Programms an sich in Frage gestellt wird: Man könnte auf dieses durchaus verzichten und gleich alles komplett mit FDM oder anderen fertigen Downloadern herunterladen lassen. Aber für mich geht es bei Delphi auch immer noch um "sportlichen Ehrgeiz" und den Wunsch, fürs nächste Mal noch etwas dazuzulernen...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Fr 14.01.11 16:37 
Moin!

Die Indy-Kompos sind schon relativ schlank, ich glaube nicht, dass die besonders langsam sind. :nixweiss: Allerdings wird das OnWork-Ereignis threadsave im MainThread abgewickelt, das könnte schon selbst die Bremse sein. :idea: Mach das in einem Thread und schau dir dessen Performance an, ich würde das mal testweise mit dem Ereignis lassen... :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
sky21
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 141

W7
D2010, XE2
BeitragVerfasst: Fr 14.01.11 16:42 
user profile iconsnoopyonline hat folgendes geschrieben Zum zitierten Posting springen:
Ach waren das noch Zeiten als man - lange ist es her - in einem Forum auf sachlich, technische Beiträge noch sachlich, technische und hilfreiche Antworten bekam...

Das waren wirklich noch Zeiten! Wirklich schade, dass man heutzutage sich oft zuerst rechtfertigen muss und lang und breit den Sinn des vorhabens ausdiskutieren muss. Aber "good news": Hier im Forum ists viel besser als anderswo *thumb up* und es gibt relativ wenige die überall böse Absichten wittern.

Nun zum egientlichen Thema: Versuche einmal die OnWork() Events abzuhängen. Womöglich sind genau diese Aufrufe für die Verlangsamung verantwortlich. Vor und nach dem Get()-Funktionsaufruf den Zeitstempel nehmen und GesamtThroughput ausrechnen und vergleichen.

Fügt der FDM noch HTTP Headers ein, die bei deinem GET Request fehlen? Womöglich reagiert der Server anders.

Nachtrag: Oh, Narses kam mir mit dem OnWork()-Vorschlag zuvor ;-)
snoopyonline Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Sa 15.01.11 17:26 
Zuerst einmal Dank an Sky21 und Narses für die Vorschläge - wenn zwei die gleiche Idee haben, ist vielleicht etwas dran...

Ich habe das mit dem Abhängen des Onwork-Ergeignisses und nachträglicher Geschwindigkeitsermittlung ausprobiert. Leider keine Verbesserung.
Wobei ich auch das Gefühl habe, dass das OnWork-ereignis relativ selten (alle 0,5 sec) aufgerufen wird und somit sowieso nicht allzuviel Bremspotenzial hat.
Außerdem wäre es sehr schade, wenn es tatsächlich daran gelegen hätte - ein eingefrorenes Programm während des Downloads und der Verzicht auf Statusinfos wären dann doch ein zu hoher Preis für die Geschwindigkeit.

user profile iconsky21 hat folgendes geschrieben Zum zitierten Posting springen:

Fügt der FDM noch HTTP Headers ein, die bei deinem GET Request fehlen? Womöglich reagiert der Server anders.


Leider kann ich nicht nachvollziehen, was mit diesem Hinweis gemeint ist bzw. was ich deiner Meinung nach noch ausprobieren sollte. Bin doch eher Indy-Anfänger und kann mit dem Verweis auf die HTTP Headers rein gar nichts anfangen.