FileStream.Seek() 效率太低, 建议用FileStream.Read()代替
FileStream.Seek()是一个很神奇的东西,它可以让我们在文件流中跳转到指定的位置,它也非常好用。但是我们在实际使用过程中发现它的效率不高,尤其是在高频率Seek()的时候,效率非常低。这里我们仅用一个实验显示给大家。
实验条件:
对象:188MB的二进制文件
用Seek()和Read(), 在文件流中每次跳转/读取指定个数的字节,一直到文件末尾,统计次数和耗费总时间
1. 每次读取1000字节
- Seek() : 总共操作198092次, 使用了0.317秒
- Read(): 总共操作198092次, 使用了0.308秒
这样中情况貌似没有什么区别
2. 每次读取20字节,这时候大家就可以看到差别了
- Seek() : 总共操作9904628次, 使用了15.8秒
- Read(): 总共操作9904628次, 使用了0.538秒
所以如果大家如果需要频繁跳转的时候,尽量不要用Seek(),而用Read()代替 (读取但不用)
FileStream.Read(new byte[20], 20, 0)