FileStream.Seek() 效率太低, 建议用FileStream.Read()代替

FileStream.Seek()是一个很神奇的东西,它可以让我们在文件流中跳转到指定的位置,它也非常好用。但是我们在实际使用过程中发现它的效率不高,尤其是在高频率Seek()的时候,效率非常低。这里我们仅用一个实验显示给大家。

实验条件:

对象:188MB的二进制文件

用Seek()和Read(), 在文件流中每次跳转/读取指定个数的字节,一直到文件末尾,统计次数和耗费总时间

1. 每次读取1000字节

  • Seek() : 总共操作198092次, 使用了0.317秒
  • Read(): 总共操作198092次, 使用了0.308秒

这样中情况貌似没有什么区别

FileStream.Seek() 效率太低, 建议用FileStream.Read()代替

2. 每次读取20字节,这时候大家就可以看到差别了

  • Seek() : 总共操作9904628次, 使用了15.8
  • Read(): 总共操作9904628次, 使用了0.538秒

FileStream.Seek() 效率太低, 建议用FileStream.Read()代替

FileStream.Seek() 效率太低, 建议用FileStream.Read()代替

所以如果大家如果需要频繁跳转的时候,尽量不要用Seek(),而用Read()代替 (读取但不用)

FileStream.Read(new byte[20],  20, 0)