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

时间:2015-04-02 12:15:53

标签: .net streamwriter

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

  

为指定的内容初始化StreamWriter类的新实例   使用UTF-8编码和默认缓冲区大小进行流式传输。

我想使用其他构造函数重载之一但是想使用默认缓冲区大小。什么是默认缓冲区大小? MSDN没有说任何地方。 Rubens Farias'回答here说它是“4 KiB”(无论那意味着什么......知道KB?)但没有任何证据表明这一点。

1 个答案:

答案 0 :(得分:39)

  

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

好吧,不要这样做。现在不再需要了,您可以查看Microsoft程序员编写的实际源代码。总是比反编译代码更好,它有评论。

访问Reference Source网站。它是在一年前更新过的,它现在有一个非常光滑的浏览器界面,实际上比反编译器更快。只需在搜索框中输入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,就不能改变它。它确实暴露了注释的经典问题,它们具有不被维护和代码不匹配的诀窍。关于"自适应缓冲的问题"实际上并未实施。 A KiB是一种1024脚趾的动物,从不1000只。