Kopiergeschwindigkeit begrenzen

22/01/2009 - 17:46 von Hans Peter | Report spam
Hallo zusammen,

ich kopiere über ein FileStream viele große Dateien über das lokale Netz.
Ich möchte es jetzt erreichen das nur eine maximale Transferrate beim
Kopieren verwendet wird (z.B. 500KB/sek). Ich möchte es dabei erreichen das
diese 500 KB gleichmàßig auf dem Zeitraum verteilt sind. Die Bedingung dabei
ist, das keine Peaks entstehen dürfen. Es würde also nicht ausreichen z.B.
die 500KB in 1/5 Sekunden zu kopieren und 4/5 Sekunden im Leerlauf zu
verbringen. Es müsste so aussehen das jede fünftel Sekunde 100KB kopiert
werden.

Wie kann man das realisieren? Mit einem Timer der alle 100ms Tickt und ich
beim Start erreichne wieviel Bytes er in 100ms lesen muss?

Gruß Hans
 

Lesen sie die antworten

#1 Armin Zingler
23/01/2009 - 15:00 | Warnen spam
Hans Peter wrote:
Hallo zusammen,

ich kopiere über ein FileStream viele große Dateien über das lokale
Netz. Ich möchte es jetzt erreichen das nur eine maximale
Transferrate beim Kopieren verwendet wird (z.B. 500KB/sek). Ich
möchte es dabei erreichen das diese 500 KB gleichmàßig auf dem
Zeitraum verteilt sind. Die Bedingung dabei ist, das keine Peaks
entstehen dürfen. Es würde also nicht ausreichen z.B. die 500KB in
1/5 Sekunden zu kopieren und 4/5 Sekunden im Leerlauf zu verbringen.
Es müsste so aussehen das jede fünftel Sekunde 100KB kopiert werden.




Die tatsàchliche Übertragungsgeschwindigkeit hàngt einzig und allein vom
physikalischen Übertragungsmedium ab. Insofern làsst sich das nicht direkt
regeln. Es bleibt dir nur übrig, Leerlauf einzubauen. Du kannst lediglich
variieren, in welchen Abstànden welche Datenmenge verschickt wird. Die
Übertragung der Daten selbst wird dann wie gesagt mit der Geschwindigkeit
des Leiters durchgeführt. Wenn der Leiter eine Geschwindigkeit von 10MB/Sek
hat, kannst du
- jede Sekunde 500 KB verschicken. Das dauert 50ms. 950ms bleiben Leerlauf.
- alle 100ms 50KB verschicken. Das dauert 5ms. 95ms bleiben Leerlauf.
- alle 10ms 5 KB verschicken. Dauer: 0,5ms. 9,5ms sind Leerlauf.
- etc.

Damit kannst du eine _durchschnittliche_ Übertragungsgeschwindigkeit
erreichen. Die Peaks von 10MB/s sind nicht zu verhindern, wenn man nur die
Zeit misst, in der Daten übertragen werden.

Wie kann man das realisieren? Mit einem Timer der alle 100ms Tickt
und ich beim Start erreichne wieviel Bytes er in 100ms lesen muss?



ja, z.B.



Armin

Ähnliche fragen