begin process at 2008 07 21 03:36:17
1 213 565 membres
33 nouveaux aujourd'hui
14 167 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

STREAM QUI LIMITE LA BANDE PASSANTE


Information sur la source



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

  • 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));
  • }
  • }
  • }
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...
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

    Aucun commentaire pour le moment.

Ajouter un commentaire

Pub



Appels d'offres

Dessins techniques
Budget : 60€
Animation Flash - Doma...
Budget : 370€
Application flash medi...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Boutique

Boutique de goodies CodeS-SourceS