0

我试图读取一个二进制文件,其中我感兴趣的数据在文件中是分开的。哪种阅读模式更好?(假设初始流位置在字节 0)

  1. 读取(计数=8192),查找(偏移量=20480,原点=当前),读取(计数=8192),查找(偏移量=12288,原点=当前)
  2. 读取(计数=8192),查找(偏移量=28672,原点=开始),读取(计数=8192),查找(偏移量=49152,原点=开始)

由于 .NET Streams 使我能够选择 SeekOrigin,哪种搜索模式更好,从 开始SeekOrigin.Begin,还是从该SeekOrigin.Current位置继续搜索?

有关系吗?操作系统不能自己进行计算并为我决定吗?

4

1 回答 1

1

没关系。SeekOrigin.Current 只是一个方便的选项,可以帮助您避免自己跟踪绝对位置。Windows 已经在内部执行此操作,因此将当前偏移量转换为开始偏移量没有问题。这才是它真正需要的。您如何认为操作系统可以自动搜索到 20480,然后自动搜索到 12288 尚不清楚。它不能,Windows 没有记录大小的概念。文件只是一个字节流,没有强加于它的结构。

您寻求的确切顺序确实很重要。通过按顺序访问文件位置,您的程序运行速度最快。这是数据如何写入磁盘然后从磁盘中读取的副作用,如果磁盘没有严重碎片化,通常是按顺序读取的。文件系统缓存利用了一些东西,它会从同一个磁盘磁道中预读取数据,因为它很便宜而且很可能被使用。通过按顺序查找,您将最大限度地提高数据出现在缓存中的几率。您只需为非常快速的内存到内存复制付费,而不必等待磁盘。

于 2012-07-29T17:10:30.383 回答