none
Downloadgeschwindigkeit ermitteln und anzeigen (mit Timer) RRS feed

  • 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

    Samstag, 5. Juni 2010 21:31

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-

     

    Gruß Elmar
    Samstag, 5. Juni 2010 22:12
  • 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

    Donnerstag, 29. Juli 2010 07:29

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-

     

    Gruß Elmar
    Samstag, 5. Juni 2010 22:12
  • 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

    Mittwoch, 28. Juli 2010 19:51
  • 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

    Donnerstag, 29. Juli 2010 07:29