Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#StreamWriter缓冲区大小不起作用_C#_Buffer_Streamwriter - Fatal编程技术网

C#StreamWriter缓冲区大小不起作用

C#StreamWriter缓冲区大小不起作用,c#,buffer,streamwriter,C#,Buffer,Streamwriter,我想设置一个小的缓冲区,以便更频繁地将缓冲区写入文件。但这似乎不起作用。我编写了以下代码,并不时检查文本文件,发现当I=840且文件大小正好为4K(默认缓冲区大小)时,文本被写入文件。为什么 using (StreamWriter sw = new StreamWriter("u:\\log.txt", true, Encoding.UTF8, 1)) { for (int i = 0; i < 300000; i++)

我想设置一个小的缓冲区,以便更频繁地将缓冲区写入文件。但这似乎不起作用。我编写了以下代码,并不时检查文本文件,发现当I=840且文件大小正好为4K(默认缓冲区大小)时,文本被写入文件。为什么

        using (StreamWriter sw = new StreamWriter("u:\\log.txt", true, Encoding.UTF8, 1))
        {
            for (int i = 0; i < 300000; i++)
            {
                sw.WriteLine(i);
                Console.Write(i);
                Console.ReadLine();
            }
        }
使用(StreamWriter sw=newstreamwriter(“u:\\log.txt”,true,Encoding.UTF8,1))
{
对于(int i=0;i<300000;i++)
{
sw.WriteLine(i);
控制台。写入(i);
Console.ReadLine();
}
}

StreamWriter使用底层文件流,根据源代码,看起来缓冲区大小没有传递到文件流


您可以在谷歌上搜索:.net源代码streamwriter

底层文件流的默认缓冲区大小为4096。StreamWriter的最小缓冲区大小为128。您正在创建1字节的缓冲区,您正在文件中写入的整数变量的大小是多少?我还将注意到,与文档相反,缓冲区大小是16位字符数,而不是字节数。请参阅。我尝试将缓冲区大小设置为128、2048、4096和8192。似乎只有4096和8192起作用,即当文件大小分别为4096和8192时刷新缓冲区。所以我认为最小值是4096。缓冲区大小应该是字节数,请参阅MSDN我阅读的源代码。实际上,缓冲区大小被传递到文件流。但有一个最小缓冲区,即4096。