Wie man die genaue download - /upload-Geschwindigkeit in C#.NET?
Möchte ich, um die genaue download - /upload-Geschwindigkeit über ein Netzwerk-Interface mit C# .NET
Ich weiß, dass es berechnet werden kann, mit GetIPv4Statistics().BytesReceived
und legt den Thread schlafen, irgendwann. Aber es ist nicht zu geben, die Ausgabe, was ich bin immer in meinem browser.
Wie viel Unterschied ist es? Was andere Netzwerk-traffic gibt es?
Ich bin nicht zu sehen, eine Konstante Geschwindigkeit in meiner Anwendung, in der Erwägung, dass mein browser zeigt so etwas wie konstanter Geschwindigkeit. Meine Anwendung schwankt sehr viel.
Wie ist der Durchsatz berechnet werden kann? Ich würde erwarten, dass es nicht schwanken sehr. Dies könnte darauf hindeuten, die den gleitenden Durchschnitt wird falsch berechnet.
Ich nehme eine
en.wikipedia.org/wiki/Moving_average - z.B. halten der Werte aus den letzten 10 200ms "liest". In LINQ
Ich bin nicht zu sehen, eine Konstante Geschwindigkeit in meiner Anwendung, in der Erwägung, dass mein browser zeigt so etwas wie konstanter Geschwindigkeit. Meine Anwendung schwankt sehr viel.
Wie ist der Durchsatz berechnet werden kann? Ich würde erwarten, dass es nicht schwanken sehr. Dies könnte darauf hindeuten, die den gleitenden Durchschnitt wird falsch berechnet.
Ich nehme eine
DateTime begin
dann nehme ich die ByteReceived.Dann rufe ich Thread.Sleep(200)
und dann wieder die Berechnung der ByteReceived und DateTime end
. Jetzt habe ich subtrahieren beide und teilen sich den ByteReceived mit der Sekunden berechnet, die von DateTime
.en.wikipedia.org/wiki/Moving_average - z.B. halten der Werte aus den letzten 10 200ms "liest". In LINQ
Sum
können verwendet werden, um zu machen, relativ leicht.InformationsquelleAutor soham | 2012-11-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Suchen Sie in einer anderen Antwort auf eine Frage, die Sie gebucht NetworkInterface.GetIPv4Statistics().BytesReceived - Was braucht es dafür? ich glaube das Problem könnte sein, dass Sie mit zu kleinen Abständen. Ich glaube, der counter zählt nur ganze Pakete, und wenn Sie zum Beispiel das herunterladen einer Datei die Pakete bekommen vielleicht so groß wie
64 KB
(65,535 bytes
, IPv4-max Paket Größe), das ist ziemlich viel, wenn Sie Ihre maximale download-Durchsatz ist60 KB/s
und Sie Messen200 ms
Abständen.Gegeben, dass Sie Ihre Geschwindigkeit ist
60 KB/s
ich würde gesetzt haben, die Laufzeit auf 10 Sekunden, um mindestens 9 Pakete pro Durchschnittliche. Wenn Sie schreiben, die es für alle Arten von verbindungen würde ich empfehlen die Lösung, die dynamisch, d.h., wenn die Geschwindigkeit hoch ist, können Sie leicht verringern Sie den durchschnittlich Intervall, aber im Falle von langsamen verbindungen müssen Sie erhöhen die Mittelung Intervall.Entweder wie @pst empfiehlt, indem ein gleitender Durchschnitt oder erhöhen Sie einfach die schlafen bis zu vielleicht 1 Sekunde.
Werden und sicher sein, zu teilen von der tatsächlichen Zeit genommen, anstatt die Zeit verging zu
Thread.Sleep()
.Zusätzlichen Gedanken auf Intervallen
Mein Vorgang wäre so etwas wie dieses, Messen Sie für 5 Sekunden und das sammeln von Daten, dh bytes empfangen sowie die Anzahl der Pakete.
Dadurch wird das Intervall langsam steigern von etwa einigen zehn ms bis zu der Zeit pro Paket. So werden wir immer mindestens (im Durchschnitt) ein Paket pro Intervall, und wir werden nicht die Nüsse gehen, wenn wir auf eine 10-Gbit /s-Verbindung. Der wichtige Teil ist, dass die Messzeit sollte nicht linear sein, um die Menge an empfangenen Daten.
Würde ich auch empfehlen. Und siehe meinen letzten edit, die schneller die Verbindung der kleinere "Menge Zeit" ist nötig, weil das Verhältnis zwischen Durchsatz und max IPv4-Paket-Größe. Achten Sie immer auf den Mittelwert über mindestens eine Handvoll Pakete 🙂
Scheint unwahrscheinlich, dass ip-Pakete >15xx bytes verwendet werden. Nur wenige internet-Anschlüsse unterstützen eine größere MTU.
Yeah! Ich war nicht an alles denken über die Pakete. Sehr guter Punkt. Also, ich denke, ich sollte halten Sie mindestens 20 letzten Einträge mit 200ms Intervall. und ich sollte auch eine Lösung implementieren, so dass Es aktualisiert werden kann 200ms Wert, wenn die Geschwindigkeit hoch oder niedrig ist.
Sie sind natürlich richtig, dass 64KB frames werden nur selten eingesetzt, aber auch jumbo frames mit 9 KB würde schwerwiegende Auswirkungen auf eine 60 KB/s-Verbindung mit mindestens 200 ms Messung von Abständen. Können sagen, er ist mit wifi 802.11 n als auch zu Hause die Kräfte nach unten zwischen platzt, das würde auch dazu führen, den gleichen Effekt. Wir können nicht einfach wissen, aber es ist immer gut zu planen für das Schlimmste 🙂
InformationsquelleAutor flindeberg
Hier ist eine kurze code-snippet aus LINQPad. Es verwendet einen sehr einfachen gleitenden Durchschnitt. Es zeigt, "exakte Geschwindigkeiten", mit "Speedtest.net". Dinge im Auge zu behalten sind Kbit /s ist in bits - und HTTP-Daten werden Häufig komprimiert, so dass die "heruntergeladenen bytes" wird deutlich kleiner bei stark komprimierbaren Daten. Auch, vergessen Sie nicht, dass alle alten Verfahren tun könnte jede alte Ding auf dem internet diese Tage (ohne strengere firewall-Einstellungen) ..
Ich mag flindenberg Antwort ("nicht ändern, übernehmen), und ich bemerkte, dass einige polling-Zeiten zurückkehren würde, "0" , richtet seine/Ihre Schlussfolgerungen.
Nutzung auf eigene Gefahr.
if (i % 10 == 0) { // ~1 second
Teil. Sie zeigen die Ausgabe in alle 1 Sek. ist es so?Ja. Es ist leichter zu Lesen als jedes 1/10tel einer Sekunde. Alternativ einfach Umfrage einmal pro Sekunde und passen die SMA zu sagen, N (vielleicht 4?) Sekunden ..
Was meinst du mit SMA??
SMA - simple moving average. Sollten Sie links prüfen, die zur Verfügung gestellt von jemandem, der versucht zu helfen, unter Berücksichtigung es ist das Thema, das Sie erstellt haben.
Okay. Sorry. Ich hatte nur die ersten paar Zeilen des wikipedia-Seite. Jetzt habe ich gesehen. Tut Mir Sehr Leid. Halten Sie Ihre Worte im Hinterkopf für die Zukunft.
InformationsquelleAutor
Bitte versuchen Sie dies. Um zu überprüfen, Geschwindigkeit der Internetverbindung.
Es gibt Ihnen die Geschwindigkeit in Kb/Sec und teilen Sie das Ergebnis.
InformationsquelleAutor Sandeep Gupta