什么时候使用.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来获得更好的性能。