AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi BufferGröße bei IdHTTP.Get / TFileStream ändern?
Thema durchsuchen
Ansicht
Themen-Optionen

BufferGröße bei IdHTTP.Get / TFileStream ändern?

Ein Thema von stho · begonnen am 14. Apr 2010 · letzter Beitrag vom 14. Apr 2010
Antwort Antwort
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#1

BufferGröße bei IdHTTP.Get / TFileStream ändern?

  Alt 14. Apr 2010, 10:59
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...

Ist sicher nur so nen kinkerlitzchen aber mir bereitet das echt Kopfschmerzen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#2

Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?

  Alt 14. Apr 2010, 11:38
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:
Durchschnitt := (Durchschnitt * 90%) + (Aktuell * 10%);
Somit hättest du z.B. einen weniger schwankenden Durchschnitt der etwa letzen 10 Sekunden.


[edit]
Ja, das hätte ich vielleicht besser veschreiben sollen:
AktuelleGeschwindigkeit = die gemessene Geschwindigkeit der letzen Sekunde (siehe Schlußwort von Beitrag 5)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#3

Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?

  Alt 14. Apr 2010, 11:46
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)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#4

Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?

  Alt 14. Apr 2010, 11:49
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?

  Alt 14. Apr 2010, 11:54
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.
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#6

Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?

  Alt 14. Apr 2010, 12:01
natürlich will ich ja nicht byteweise einlesen...
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?

  Alt 14. Apr 2010, 16:36
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"
Andreas
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#8

Re: BufferGröße bei IdHTTP.Get / TFileStream ändern?

  Alt 14. Apr 2010, 22:25
Vielleicht IdHTTP.IOHandler.RecvBufferSize := ??? ist meines Wissens per GRecvBufferSizeDefault = 32*1024.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz