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



对于public StreamWriter(Stream stream)构造函数,MSDN表示

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

我想使用其他构造函数重载之一,但希望使用默认的缓冲区大小。默认缓冲区大小是多少?MSDN没有说任何地方。鲁本·法里亚斯在这里的回答是"4 KiB"(不管这意味着什么……我想是KB?),但没有任何链接可以证实这一点。

啊,当文档失败时,反编译。我总是忘了!

好吧,不要那样做。这已经没有必要了,你可以看看微软程序员写的实际源代码。它总是比反编译的代码好,它有注释。

访问参考资料来源网站。它大约在一年前更新过,现在有了一个非常流畅的浏览器界面,实际上比反编译器更快。只需在搜索框中键入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个。

最新更新