StreamWriter的默认缓冲区大小是多少?

41
对于 public StreamWriter(Stream stream) 构造函数,MSDN 说:

使用 UTF-8 编码和默认缓冲区大小,为指定的流初始化 StreamWriter 类的新实例。

我想要使用其他构造函数重载,但是希望使用默认缓冲区大小。默认缓冲区大小是多少?MSDN 上没有说明。 Rubens Farias' 的回答这里说是 "4 KiB"(不知道什么意思...KB吧?),但没有链接证实这一点。


这篇文章建议默认缓冲区大小为1024字节。 - dotNET
啊,当文档失效时,反编译就派上用场了。我总是忘记这一点!谢谢 :) - rory.ap
1
这里是 - Sriram Sakthivel
@SriramSakthivel -- 谢谢你! - rory.ap
1
@roryap:1KiB = 1024B(与1KB相对,后者可能表示1000B或1024B)。请参见https://dev59.com/_EjSa4cB1Zd3GeqPHKZ5#1200253。 - Brian
1个回答

64
当文档无法提供帮助时,反编译是一个不错的选择。我总是会忘记这一点!
但是,请不要这样做。现在已经没有必要了,您可以查看微软程序员编写的实际源代码。与反编译代码相比,它总是更好的,因为有注释。
请访问参考源代码网站。它已经更新了大约一年,现在有一个非常流畅的浏览器界面,比反编译器还要快。只需在搜索框中键入StreamWriter即可。最多只需要十几秒钟即可发现:
    // For UTF-8, the values of 1K for the default buffer size and 4K for the
    // file stream buffer size are reasonable & give very reasonable
    // performance for in terms of construction time for the StreamWriter and
    // write perf.  Note that for UTF-8, we end up allocating a 4K byte buffer,
    // which means we take advantage of adaptive buffering code.
    // The performance using UnicodeEncoding is acceptable.  
    internal const int DefaultBufferSize = 1024;   // char[]
    private const int DefaultFileStreamBufferSize = 4096;

因此,StreamWriter的默认值为1024个字符。如果您写入文件而不是流,则有一个4096字节缓冲区的FileStream,无法更改。这确实揭示了注释的经典问题,它们往往无法得到维护并且与代码不匹配。有关“自适应缓冲”的思考实际上没有被实现。KiB是一种具有1024个脚趾的动物,而不是1000。


1
关于4096字节的文件缓冲区。如果您使用正确的FileStream构造函数,您可以更改它。然后,您可以将该FileStream传递给StreamWriter构造函数。 - John Rusk - MSFT
我还没有测试是否需要将更大的缓冲区大小传递给两个构造函数(StreamWriter 和 FileStream),或者只需将其传递给 FileStream 一个即可。但我看不出同时传递相同的大尺寸会有什么坏处。 - John Rusk - MSFT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接