81 votes

C # FileStream: Taille optimale de la mémoire tampon pour écrire des fichiers volumineux?

Supposons que j'écris quelques fichiers sur le disque, entre 2 Mo et 5 Go. Quelles sont les valeurs de tampon sensibles pour FileStream?

Est-il judicieux de travailler avec des tailles de mémoire tampon de plusieurs mégaoctets, ou devrais-je m'en tenir aux tampons de kilo-octets?

46voto

Rubens Farias Points 33357

La taille de la mémoire tampon par défaut est de 4 Ko.

Jetez également un coup d’œil ici: Modèles de programmation de fichiers séquentiels et performances avec .NET

38voto

Firestrand Points 667

Un petit repère rapide basé sur le document référencé n'indique aucune augmentation des performances de mon système supérieure à 128 Ko. Votre kilométrage peut varier, n'hésitez pas à utiliser ce qui suit.

         Stopwatch sw = new Stopwatch();
        Random rand = new Random();  // seed a random number generator
        int numberOfBytes = 2 << 22; //8,192KB File
        byte nextByte;
        for (int i = 1; i <= 28; i++) //Limited loop to 28 to prevent out of memory
        {
            sw.Start();
            using (FileStream fs = new FileStream(
                String.Format(@"C:\TEMP\TEST{0}.DAT", i),  // name of file
                FileMode.Create,    // create or overwrite existing file
                FileAccess.Write,   // write-only access
                FileShare.None,     // no sharing
                2 << i,             // block transfer of i=18 -> size = 256 KB
                FileOptions.None))  
            {
                for (int j = 0; j < numberOfBytes; j++)
                {
                    nextByte = (byte)(rand.Next() % 256); // generate a random byte
                    fs.WriteByte(nextByte);               // write it
                } 
            }
            sw.Stop();
            Console.WriteLine(String.Format("Buffer is 2 << {0} Elapsed: {1}", i, sw.Elapsed));
            sw.Reset();
        }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X