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

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

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

La taille du tampon par défaut est de 4 Ko.

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

Un petit test rapide basé sur le document référencé ne montre aucune augmentation des performances sur mon système supérieure à 128 Ko de taille de tampon. Votre kilométrage peut varier, n’hésitez pas à utiliser le ci-dessous.

  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(); }