Après quelques longue heures de Google à chercher comment limiter la bande passante d'un flux (ou Stream), je suis tombé sur cette source :
http://www.codeproject.com/KB/IP/Bandwidth_throttling.aspx
Seulement cette classe ne fournis pas un flux constant. Alors je m'en suis inspiré pour en faire une qui lisse un peu plus le débit.
Source / Exemple :
using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.IO;
namespace MaitreDede.Test
{
class Program
{
static void Main(string[] args)
{
//Paramétrage
//Chemin vers un gros fichier
string file = "grosfichier.zip";
//Bande passante en ko/s
int bandwidth = 20480;
//On récupére des info et on charge le ficher en mémoire
//On peut aussi lire directement le fichier à partir du disque
FileInfo info = new FileInfo(file);
long size = info.Length;
FileStream instr = File.OpenRead(file);
byte[] buffer = new byte[size];
MemoryStream ms = new MemoryStream();
int read;
while ((read = instr.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
instr.Close();
ms.Position = 0;
//On crée le flux
ThrottleStream str = new ThrottleStream(ms, bandwidth);
//Top Chrono !!!
TimeSpan start = new TimeSpan(0, 0, 0, 0, Environment.TickCount);
while (str.Read(buffer, 0, buffer.Length) > 0)
{
Console.WriteLine("loop...");
}
//Terminé
TimeSpan stop = new TimeSpan(0, 0, 0, 0, Environment.TickCount);
//Statistiques
Console.WriteLine("Bande passante : " + bandwidth);
Console.WriteLine("Taille du fichier : " + size);
Console.WriteLine("Temps théorique : " + new TimeSpan(0, 0, (int)(size / bandwidth)));
Console.WriteLine("Durée totale : " + (stop - start));
}
}
}
Conclusion :
Cette métheode n'est qu'une manière de faire parmis tant d'autres...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.