Benutzer mit den meisten Antworten
Downloadgeschwindigkeit ermitteln und anzeigen (mit Timer)

Frage
-
Gute(n) Abend (Nacht)!
Vielleicht könnt Ihr mir helfen: Ich suche schon länger nach einem Code der mir die Downloadgeschwindigkeit anzeigt. Leider wenn ich suche kommen immer nur Ergebnisse wie "niedrige downloadgschwindigkeit", aber dass hat dann nichts mit Visual Basic .Net zu tun.
Also meine Verwendung: Ein Shutdownmanager der bei einer zu niedrigen Downloadgeschwindigkeit den Computer herunterfährt, neu startet, in den Standby oder Ruhezustand wechselt. Alles kein Problem doch ich brauche einen Code der mir die Downloadgeschwindigkeit anzeigt.
Ich bitte euch (freundlich) um Hilfe ;)
LG Dominik
Antworten
-
Hallo Dominik,
vom Grundsatz ist das eine einfache Division: Übertrage Bytes / Zeit.
Wobei Du zum einen die Geschwindigkeit für den gesamten bisherigen Download
ermitteln kannst - und aus der Gesamtgröße der Datei (soweit bekannt)
auch die verbleibende Zeit schätzen.Um eine "Verlangsamung" zu erkennen messe weitere kürzere Intervalle -
z. B. je Sekunde, 5 Sekunden, Minute usw.- je kürzer das Intervall,
um so größer ist die zu erwartende Schwankung, siehe auch Varianz .
Die Werte kann ein Array oder Auflistung die Zeit, Byte-Paare aufnehmen.
Der Rest hängt von den eingesetzten (Kein-Problem) Komponenten ab,
ob Du einen separaten Timer benötigst, wie Du an die Größe der
aktuellen Übertragung kommst.
Beim WebClient wäre z. B. DownloadProgressChanged ein Ansatzpunkt-- Als Antwort vorgeschlagen Thorsten Dörfler Sonntag, 6. Juni 2010 20:17
- Als Antwort markiert Robert Breitenhofer Mittwoch, 16. Juni 2010 12:54
-
Hallo Dominik,
da mußte ich erst Frage und Antwort selbst wieder lesen ;-)
Deine beispielrechnung wäre dafür schon richtig. Aber...
Ein "Testdownload" für eine kleine Datei kann bestenfalls einen Hinweis liefern,
wie schnell die verfügbare Verbindung ist.
Durch die dynamische Struktur des Internets kann man daraus aber nicht ableiten,
dass ein darauf folgender Download einer großen Datei genauso schnell abläuft.
Im Laufe der Übertragung kann die jeweilige Route mehr oder weniger belastet sein
und die Übertragungsrate sich verändern.Lädst Du Daten von einem großen Anbieter (wie z. B. Microsoft), so können bei jedem
Download die Daten von einem anderen Rechner kommen, da dort große Clusterverbünde
zur Lastverteilung verwendet werden.Um eine kontinuierliche Anzeige zu haben, wirst Du deswegen die Zeiten während des
Downloads messen müssen. Und das für die Dauer des Downloads in Intervallen wiederholen.Das einfachste wäre wie schon geschrieben, den WebClient asynchron zu verwenden.
Dort erhälst Du eine (prozentuale) Fortschrittsanzeige. Die ermittelt sich aus der Division
der übertragenden Bytes zur Gesamtgröße.
Die aktuelle Transferrate kriegst Du so zwar nicht, aber die hilft am Ende auch
nur wenig bei der Entscheidung: Warte ich oder breche ich ab...Gruß Elmar
- Als Antwort markiert Dominik Klasen Mittwoch, 11. August 2010 11:32
Alle Antworten
-
Hallo Dominik,
vom Grundsatz ist das eine einfache Division: Übertrage Bytes / Zeit.
Wobei Du zum einen die Geschwindigkeit für den gesamten bisherigen Download
ermitteln kannst - und aus der Gesamtgröße der Datei (soweit bekannt)
auch die verbleibende Zeit schätzen.Um eine "Verlangsamung" zu erkennen messe weitere kürzere Intervalle -
z. B. je Sekunde, 5 Sekunden, Minute usw.- je kürzer das Intervall,
um so größer ist die zu erwartende Schwankung, siehe auch Varianz .
Die Werte kann ein Array oder Auflistung die Zeit, Byte-Paare aufnehmen.
Der Rest hängt von den eingesetzten (Kein-Problem) Komponenten ab,
ob Du einen separaten Timer benötigst, wie Du an die Größe der
aktuellen Übertragung kommst.
Beim WebClient wäre z. B. DownloadProgressChanged ein Ansatzpunkt-- Als Antwort vorgeschlagen Thorsten Dörfler Sonntag, 6. Juni 2010 20:17
- Als Antwort markiert Robert Breitenhofer Mittwoch, 16. Juni 2010 12:54
-
Hallo!
Endlich komme ich mal dazu auf dieses Thema zu antworten...
Also würde ich zum Beispiel (wenn ich jetzt die KB/s anzeigen will) einfach eine kleine Datei von einem Webserver laden und dann einfach Bytes / Zeit berechnen?
Wenn die Datei zum Beispiel 1024KB groß ist dann einfach durch z.B. drei Sekunden teilen? Dann käme ich auf 341(KB/s). So mache ich das dann?Nur damit ich jetzt nichts falsch Verstehe!
LG Dominik
-
Hallo Dominik,
da mußte ich erst Frage und Antwort selbst wieder lesen ;-)
Deine beispielrechnung wäre dafür schon richtig. Aber...
Ein "Testdownload" für eine kleine Datei kann bestenfalls einen Hinweis liefern,
wie schnell die verfügbare Verbindung ist.
Durch die dynamische Struktur des Internets kann man daraus aber nicht ableiten,
dass ein darauf folgender Download einer großen Datei genauso schnell abläuft.
Im Laufe der Übertragung kann die jeweilige Route mehr oder weniger belastet sein
und die Übertragungsrate sich verändern.Lädst Du Daten von einem großen Anbieter (wie z. B. Microsoft), so können bei jedem
Download die Daten von einem anderen Rechner kommen, da dort große Clusterverbünde
zur Lastverteilung verwendet werden.Um eine kontinuierliche Anzeige zu haben, wirst Du deswegen die Zeiten während des
Downloads messen müssen. Und das für die Dauer des Downloads in Intervallen wiederholen.Das einfachste wäre wie schon geschrieben, den WebClient asynchron zu verwenden.
Dort erhälst Du eine (prozentuale) Fortschrittsanzeige. Die ermittelt sich aus der Division
der übertragenden Bytes zur Gesamtgröße.
Die aktuelle Transferrate kriegst Du so zwar nicht, aber die hilft am Ende auch
nur wenig bei der Entscheidung: Warte ich oder breche ich ab...Gruß Elmar
- Als Antwort markiert Dominik Klasen Mittwoch, 11. August 2010 11:32