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

 

posted @ 2024-03-08 15:58  WmW  阅读(146)  评论(0编辑  收藏  举报