慢读数百个文件

时间:2013-02-19 15:39:44

标签: c# performance file binary

我处理更多二进制文件时遇到问题。我有很多文件夹,每个文件夹大约有200个文件夹。

我选择其中2个目录,然后从这2个目录中的所有bin文件(它们的路径)保存到List,并使用此列表进行一些过滤。最后,列表中大约有200个bin文件。

然后我迭代所有过滤的文件,并从每个读取的第一个4x8字节(我尝试FileStreamBinaryReader)。所有这些操作大约需要2-6秒,但这是第一次。下次它足够快。如果文件很长时间没有发生(大约30分钟),则问题会再次出现。

所以可能它是关于缓存还是什么?

是的,有人能帮帮我吗?感谢

2 个答案:

答案 0 :(得分:0)

文件的句柄很可能被处理掉了,这就是为什么GC会在一段时间后删除文件,这需要更长的时间,或者仅仅是操作系统将文件加载到RAM中然后从那里为它们提供服务这就是为什么它更快,但这不是问题,这个过程运行缓慢,因为它很慢,第二次更快是不相关的,因为你不能依赖它。

我建议尽可能平行处理这些文件,以便能够充分利用手头硬件的全部功能。

首先隔离处理文件的代码,然后在Parallel.ForEach内运行代码,看看是否有帮助。

答案 1 :(得分:0)

一种可能性是您的驱动器将进入休眠状态(通常驱动器将配置为在15-30分钟后关闭)。这可能会增加一个显着的延迟(5秒将是一个典型的数字),因为硬盘驱动器可以追溯到速度。

幸运的是,这是一件容易测试的事情。只需将断电时间设置为6小时,然后测试行为是否已更改。