什么时候使用.NET BufferedStream类?

MSDN网站指出:

缓冲区是内存中用于caching数据的字节块,从而减less了对操作系统的调用次数。 缓冲区提高了读写性能。 缓冲区可以用于读取或写入,但不能同时使用。 BufferedStream的Read和Write方法自动维护缓冲区。

我应该在任何可能的场合使用这个课程吗?

以下是我正在参加的在线课程的一些内容:

BufferedStream类是一个扩展Stream类的具体类,用于同时或asynchronous地为另一种types的stream提供额外的内存缓冲区。 必须将BufferedStream类configuration为在创build类的实例时进行读取或写入,但无法将BufferedStreamconfiguration为同时执行这两个任务。

Microsoft通过包含内置缓冲区来提高.NET Framework中所有stream的性能。 通过将BufferedStream应用于现有stream(例如FileStream或MemoryStream),性能得到显着改善。 将BufferedStream应用于现有的.NET Frameworkstream会产生双缓冲区。

BufferedStream类最常见的应用是不包含内置缓冲区的自定义stream类。

根据布拉德艾布拉姆斯,几乎从来没有: 链接

不,从FileStream包装BufferedStream没有任何好处。 我们在4年前将BufferedStream的缓冲逻辑复制到FileStream中,以鼓励更好的默认性能…实际上,我不认为.NET Framework中有任何stream需要它,但是如果自定义Stream实现可能需要它他们不默认缓冲。

我知道最好的情况是当BinaryFormatter直接从NetworkStream序列化/反序列化。 使用BufferedStream可以将性能提高十倍。

在每一个可能的场合必须使用的是常识。 从MemoryStream读写时,使用这个类没有用处,但是在执行networking或磁盘IO时(如果这些子系统的stream不自己进行缓冲),这可能非常有用。

正常的文件I / Ostream已经使用StreamReader / StreamWriter进行了缓冲。

由于stream上的读/写操作,通常使用读取/写入方法采取字节数组,你自然会提供一些缓冲自己。

如果使用非常小的数组,或者使用WriteByte,则可以通过在两者之间使用BufferedStream来获得更好的性能。