我试图读取一个二进制文件,其中我感兴趣的数据在文件中分开。 哪种阅读模式更好? (假设初始流位置在字节0处)
由于.NET Streams使我能够选择SeekOrigin,哪种搜索模式更好,
从SeekOrigin.Begin
开始的那个,或继续寻求的那个
SeekOrigin.Current
位置?
重要吗?操作系统不能只进行计算并为我决定吗?
答案 0 :(得分:1)
没关系。 SeekOrigin.Current只是一个方便的选项,可以帮助您避免自己跟踪绝对位置。 Windows已在内部执行此操作,因此将Current offset转换为Begin偏移没有任何问题。这是它真正需要的。你怎么认为操作系统可以自动寻求20480然后到12288目前还不清楚。它不能,Windows没有记录大小的概念。文件只是一个字节流,没有任何结构。
您寻找的确切顺序很重要。按顺序访问文件位置,您的程序运行速度最快。这是如何将数据写入磁盘盘然后从磁盘盘中读取的副作用,通常是在磁盘没有严重碎片的情况下顺序执行。文件系统缓存利用的东西,它将预先从同一磁盘轨道读取数据,因为它非常便宜并且很可能被使用。通过按顺序搜索,您将最大化数据将在缓存中出现的几率。你只需支付非常快的内存到内存副本,而不必等待磁盘。