我需要读取和处理超过1亿个文件,但是我只需要读取每个文件头的前4个字节,因为我只需要读取标题即可。
我已经创建了一个.net core 2.2批处理文件,并且已经使用多线程来最大化并发处理,但是在我想到所有可能的优化之后,它仍然花费太多时间。
我进行了基准测试,并且有78%的时间用于打开文件流:File.OpenRead(filePath)。
为了进行比较,File.Exist(filePath)和Director.Exist(dirPath)更快。
即使是我期望非常慢的函数Directory.GetFiles(dirPath),它也仅占用全局执行时间的4%。
另外15%的时间用于有效地从流中读取数据。
我从文档中了解到,默认缓冲区大小为4096字节,因此首先尝试减小为4字节,但是性能没有明显变化,但是我认为保留4096是正确的,因为这是群集的集群大小。文件系统。
该卷是使用CIFS协议访问的网络驱动器,但是文件保存在几个物理磁盘上。
为什么只打开流这么慢?也许是因为它需要检查用户权限?
您能建议一种访问所有文件的最快方法吗?