.NET / Windows中二进制文件的最佳文件流搜索模式

时间:2012-07-29 13:40:05

标签: .net file-io filestream seek

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

  1. 读取(计数= 8192),搜索(偏移= 20480,原点=当前),读取(计数= 8192),搜索(偏移= 12288,原点=当前)
  2. read(count = 8192),seek(offset = 28672,origin = Begin),read(count = 8192),seek(offset = 49152,origin = Begin)
  3. 由于.NET Streams使我能够选择SeekOrigin,哪种搜索模式更好, 从SeekOrigin.Begin开始的那个,或继续寻求的那个 SeekOrigin.Current位置?

    重要吗?操作系统不能只进行计算并为我决定吗?

1 个答案:

答案 0 :(得分:1)

没关系。 SeekOrigin.Current只是一个方便的选项,可以帮助您避免自己跟踪绝对位置。 Windows已在内部执行此操作,因此将Current offset转换为Begin偏移没有任何问题。这是它真正需要的。你怎么认为操作系统可以自动寻求20480然后到12288目前还不清楚。它不能,Windows没有记录大小的概念。文件只是一个字节流,没有任何结构。

您寻找的确切顺序很重要。按顺序访问文件位置,您的程序运行速度最快。这是如何将数据写入磁盘盘然后从磁盘盘中读取的副作用,通常是在磁盘没有严重碎片的情况下顺序执行。文件系统缓存利用的东西,它将预先从同一磁盘轨道读取数据,因为它非常便宜并且很可能被使用。通过按顺序搜索,您将最大化数据将在缓存中出现的几率。你只需支付非常快的内存到内存副本,而不必等待磁盘。