![]() |
BufferGröße bei IdHTTP.Get / TFileStream ändern?
Hallo Leute,
Ich möchte eine Datei per HTTP.Get (TIdHTTP) herrunter laden. Dabei ermittele ich die aktuelle Geschwindigkeit indem ich die Menge der Daten vergleiche die in 1 Sekunde runtergeladen wurde. Nun ist das Problem das die Geschwindigkeit somit in 32 kb/s Schritten schwankt. Ich führe das einfach mal auf die Buffergröße zurück... Welchen Buffer (Den von IdHTTP oder FileStream?) muss ich ändern? Und Wie mache ich das? Ich habe schon hier in der Delphi-Praxis gesucht... :gruebel: Ist sicher nur so nen kinkerlitzchen aber mir bereitet das echt Kopfschmerzen... :wall: |
Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?
Ich würde da nichts ändern, sondern einfach nur etwas Runden/Glätten.
Delphi-Quellcode:
Var Durchschnittsgeschwindigkeit: Integer;
// und dann alle einer Sekunde Durchschnittsgeschwindigkeit := Durchschnittsgeschwindigkeit * 90 div 100 + AktuelleGeschwindigkeit * 10 div 100; Zitat:
[edit] Ja, das hätte ich vielleicht besser veschreiben sollen: AktuelleGeschwindigkeit = die gemessene Geschwindigkeit der letzen Sekunde (siehe Schlußwort von Beitrag 5) |
Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?
ist nett von dir das du mir helfen möchtest ;-)
Also die Zeit berechnen oder die Geschwindigkeit berechnen ist kein Problem. (Bisschen Mathematik, 3-Satz, Prozentrechnung, ...) Naja, mir währe es nur einfach lieber einen recht genauen Wert zu bekommen. (In meinem fall den der letzten Sekunde, was ja machbar ist) Jedoch will ich einfach nur die Buffer-Größe ändern. Ich weiß ja auch nicht in welchen Buffer die Daten geschrieben werden (Ich vermute mal in den der Komponente TIdHTTP) |
Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?
Du weißt aber, daß du bei solchen Änderungen womöhlich den Datenstrom behinderst?
Wenn man z.B. mit einer zu geringen Blockgröße im Netzwerk viele Daten überträgt, dann bremst das schon "etwas" aus. Du kennst das bestimmt von einer Datei - wird dort Byteweise gelesen, dann dauert es ewig - ließt man gleich in "größeren" Blöcken, isses blötzlich sauschnell |
Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?
Die Buffergröße zu ändern ist nicht sinnvoll ;)
Der Benutzer braucht keine exakte Anzeige - dem isses wahrscheinlich sogar lieber wenn da steht "124 kB/sek" als "1017826 Bit/s". Hautsache die Anzeige gibt den Wert einigermaßen wieder und zittert nicht zu stark. Für beides ist die Methode die himi vorgeschlagen hat gut geeignet: Der Tiefpassfilter unterdrückt kleine Schwankungen, gibt aber langsame Schwankungen gut wieder. Wenn es wirklich genau sein soll (Speedtest oder sowas) dann ist die eine Sekunde zu kurz, und du solltest einen längeren Zeitraum wählen ;) Zum Schluss noch: Es gibt keine "aktuelle Geschwindigkeit" - die Geschwindigkeit wird immer gemessen, indem man die Informationsmenge durch ein Zeitintervall teilt - je kleiner das Zeitintervall ist, desto ungenauer ist die Messung. |
Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?
natürlich will ich ja nicht byteweise einlesen... :freak:
aber 32 kb/s schwankungen finde ich doch schon etwas viel... ich denke ich würde den buffer auf 8 kb setzen. Achja, die größe der Dateien liegt im Bereich 20 MB. Ich habe eure bedenken, meinungen und Hinweise vernommen und in Self.Brain gespeichert. Jedoch habe ich noch immer den Wunsch die Buffer-Größe zu ändern. (Die Frage welchen Buffer ich ändern müsste würde mir in diesem Punkt auch schon helfen ^^) EDIT: @jfheins: Ich gebe ja auch nicht in Bit/s oder Byte/s aus sondern KByte/s ^^ Aber eine Schwankund 0 kb/s -> 32 kb/s -> 0 kb/s -> 32 kb/s -> 64 kb/s [.....] ist mir definitiv viel zu viel |
Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?
Die Puffergrösse zu verkleinern würde nur dann Sinn machen, wenn das Füllen des Puffers zu lange dauern würde.
Angenommen die Puffergrösse wäre ein MByte, dann würde vielleicht nur alle 5 bis 60s eine neue Durchsatzmessung möglich werden. Dich stören aber viel mehr die stark schwankenden Werte und nicht der zu grosse zeitl. Abstand zwischen den Messungen. (zumindest steht davon nichts in deinem Beitrag) Ausserdem: je kleiner die Puffergrösse umso stärker "zappeln" die Werte der Durchsatzmessung. Du müsstest also eher die Puffergrösse erhöhen um eine bessere Mittelung der Werte zu erhalten. Abger egal, die richtige Lösung steht in Betrag #2. PS: vergiss alles in kursiver Schrift; ich habe deinen Betrag nicht genau genug gelesen. dort steht ja nur "Puffergrösse ändern" |
Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?
Vielleicht
Delphi-Quellcode:
ist meines Wissens per GRecvBufferSizeDefault = 32*1024.
IdHTTP.IOHandler.RecvBufferSize := ???
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz