我处理更多二进制文件时遇到问题。我有很多文件夹,每个文件夹大约有200个文件夹。
我选择其中2个目录,然后从这2个目录中的所有bin文件(它们的路径)保存到List,并使用此列表进行一些过滤。最后,列表中大约有200个bin文件。
然后我迭代所有过滤的文件,并从每个读取的第一个4x8字节(我尝试FileStream
或BinaryReader
)。所有这些操作大约需要2-6秒,但这是第一次。下次它足够快。如果文件很长时间没有发生(大约30分钟),则问题会再次出现。
所以可能它是关于缓存还是什么?
是的,有人能帮帮我吗?感谢答案 0 :(得分:0)
文件的句柄很可能被处理掉了,这就是为什么GC会在一段时间后删除文件,这需要更长的时间,或者仅仅是操作系统将文件加载到RAM中然后从那里为它们提供服务这就是为什么它更快,但这不是问题,这个过程运行缓慢,因为它很慢,第二次更快是不相关的,因为你不能依赖它。
我建议尽可能平行处理这些文件,以便能够充分利用手头硬件的全部功能。
首先隔离处理文件的代码,然后在Parallel.ForEach
内运行代码,看看是否有帮助。
答案 1 :(得分:0)
一种可能性是您的驱动器将进入休眠状态(通常驱动器将配置为在15-30分钟后关闭)。这可能会增加一个显着的延迟(5秒将是一个典型的数字),因为硬盘驱动器可以追溯到速度。
幸运的是,这是一件容易测试的事情。只需将断电时间设置为6小时,然后测试行为是否已更改。