c# - 使用缓冲流与在源流上使用读取方法读取相同数量的字节有何不同?

标签 c# stream

用谷歌搜索并阅读了许多相关文章,但我并不真正理解与使用流上的读取方法一次读取相同数量的字节相比,使用缓冲流的性能如何更好。据我了解,bufferstream 一次从源流中读取许多字节以节省往返行程。但这与使用 read(byte[], index, count) 有何不同,其中 count = 使用缓冲流读取的相同字节数。请帮助我理解它。

最佳答案

当从许多数据源(例如文件)中读取时,操作中最慢的部分通常是执行每个单独的读取请求。所以关键是减少请求的数量说'给我来自源 XXX 的 N 字节数据'。

在文件访问的情况下,读取 10 MB 的 1 次很可能比读取 1 MB 的 10 次更有效。

缓冲的作用是阅读的内容超过您的要求,预计您可能会在不久之后再次阅读。

因此,虽然您只取回了您请求的数据 block ,但其余部分仍存储在缓冲区中。这样,当您下次请求数据时,您想要的数据通常已经在缓冲区中,并且需要对底层数据源的请求更少。

请注意,预读行为通常在创建缓冲区时或在执行第一个读取请求时首先执行。然后缓冲区将根据需要使用额外的预读来填充自身。

关于c# - 使用缓冲流与在源流上使用读取方法读取相同数量的字节有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898577/

相关文章:

arrays - 将整数转换为字节数组 VB.net

c# - Stream 类 - 将它用于辅助方法的任何类型的数据?

c# - 使用 C# 安装 Msmq

actionscript-3 - 使用 Flex 3 检查远程文件是否存在

Linux:用列格式化流(管道)输出? (未确定的文件大小)

javascript - 为什么 request.on() 在 Node.js 中不起作用

c# - System.Net.Mail.SmtpException : Insufficient system storage. 服务器响应为: 4. 3.1 系统资源不足

javascript - 使用 AJAX 更改 div/文本

c# - 将 DebuggerStepThrough 属性添加到类

c# - 从另一个应用程序中运行的 FarPoint Spread 控件获取数据