Stream qui limite la bande passante

Description

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...

Codes Sources

A voir également

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.