Autor Beitrag
Raven280438
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99



BeitragVerfasst: Mo 05.12.11 14:33 
Hi,

ich habe ein Progamm, mit dem man u.A. Dateien per FTP runterladen kann. (per FtpWebRequest).

Jetzt möchte ich aber gerne die Bandbreite, die genutzt wird, begrenzen.

Meine Idee wäre zu verfolgen, wieviele Bytes in einer bestimmten Zeitperiode runtergeladen wurden (z.B. pro Sekunde, oder pro Zehntelsekunde etc.) und wenn das Limit erreicht ist, per Sleep für den Rest der Zeitperiode den Thread anzuhalten (der FTP-Transfer läuft in einem extra Thread).
Ist diese Idee praktikabel oder gibt es bessere Lösungen?


Gruß
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 06.12.11 18:59 
Hallo,

dieses C#-Open-Source-Programm bietet eine Option, die Bandbreite für einen Download zu begrenzen. Du kannst dir ja mal den Quellcode dazu anschauen.

Grüße,
Yogu
Raven280438 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99



BeitragVerfasst: Mi 07.12.11 10:05 
Hi,

danke für die Antwort.
Der Quellcode ist ziemlich komplex, ich hoffe ich hab an der richtigen Stellen gesucht.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
         internal void WaitFor()
         {
              if (enabled)
              {
                  double totalRate = DownloadManager.Instance.TotalDownloadRate;
  
                  if (totalRate > maxLimit)
                  {
                      currentWait += BalancerUp;
                  }
                  else
                  {
                      currentWait = Math.Max(currentWait + BalancerDown, 0);
                  }
  
                  Thread.Sleep(TimeSpan.FromMilliseconds(currentWait));
  
                  Debug.WriteLine("TotalDownloadRate = " + totalRate);
                  Debug.WriteLine("maxLimit = " + maxLimit);
                  Debug.WriteLine("currentWait = " + currentWait);
              }
          }


Das sollte doch genau Das sein, wie ich es mir oben gedacht habe, oder?



Gruß
cemolade
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26



BeitragVerfasst: Mi 07.12.11 23:46 
jap