C# 通过设置FileStream的bufferSize来降低写数据的IO次数
有的时候我们需要很频繁的向磁盘上写数据,这种频繁的IO,理论上会影响机械硬盘的寿命,
因此我们需要在写数据的时候设置一个缓冲区,先将数据写到缓冲区中,待缓冲区写满后,再一起刷到磁盘上,这样能大幅度降低IO的频次,
C#向磁盘写数据一般使用FileStream,而它正好有个缓冲区,默认大小为4096字节,
且FileStream有个构造方法能够指定这个缓冲区的大小,只要将这个数值设置的大一些,就能大幅度降低IO操作,
不过要注意的是,因为缓冲区存在数据丢失的风险(数据尚未真正写入到磁盘),如果数据丢失成本过高,就不能设置太大的缓冲区
byte[] bs = Encoding.ASCII.GetBytes("abcdefg" + Environment.NewLine); //9个字节的测试数据 int bufferSize = 1024 * 9; //默认是4096,设置缓冲区大小为 1024 * 9 FileStream fs = new FileStream("D:\\test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, bufferSize); for (int i = 0; i < 1024; i++) { //写入数据,此时写入缓冲区不会直接写到磁盘上 fs.Write(bs, 0, bs.Length); } fs.Write(bs, 0, bs.Length); //缓存写满后再写入数据就会落盘之前缓冲区中的数据 for (int i = 0; i < 1000; i++) { //缓存没写完时,不会主动落盘 fs.Write(bs, 0, bs.Length); } fs.Flush(); //最后必须刷下缓冲区,手动将所有数据都写到磁盘上,否则缓冲区中剩余的数据会丢失 fs.Dispose();