C#FileStream:写入大文件的最佳缓冲区大小?
假设我正在向磁盘写入几个文件,大小在2MB到5GB之间。 什么是FileStream的明智的缓冲区值?
使用几兆字节的缓冲区大小是合理的,还是应该坚持千字节缓冲区?
默认缓冲区大小是4 KiB。
另外,请看这里: 序列文件编程模式和性能与.NET
基于引用的文档的快速基准testing显示,在我的系统上,性能没有超过128KB的缓冲区大小。 您的里程可能会有所不同,请随时使用下面的内容。
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(); }