2

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

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

然后我遍历所有过滤的文件,并从每个读取的前 4x8 字节(我试过FileStreamor BinaryReader)。所有这些操作大约需要 2-6 秒,但只是第一次。下一次就够快了。如果文件长时间(大约 30 分钟)没有任何反应,则问题再次出现。

所以可能是关于缓存的东西还是什么?

有人能帮助我吗?谢谢

4

2 回答 2

0

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

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

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

于 2013-02-19T15:43:52.990 回答
0

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

幸运的是,这是一件容易测试的事情。只需将断电时间设置为 6 小时,然后测试行为是否发生了变化。

于 2013-02-19T16:32:07.430 回答