java - Files.walkFileTree 与 Files.walk 在 Windows NTFS 上的性能
问题描述
我的应用程序需要定期扫描文件系统以处理文件。最初我是java.nio.file.Files.walk
用来执行扫描的,但很快我就遇到了一些AccessDeniedException
. 经过一些谷歌搜索后发现Files.walk
,期望用户可以访问所探索的目录树,否则它会崩溃并停止,这使得该功能无法用于我的应用程序(它由各种系统上的许多人自托管) .
我将实现改为使用java.nio.file.Files.walkFileTree
,这似乎工作得很好并且AccessDeniedException
在用户代码中处理了。
然而,最近有人报告说,扫描时间从仅仅 12 秒(使用Files.walk
)猛增到 80 分钟(使用Files.walkFileTree
)!用户有大约 10,000 个文件夹和 120,000 个文件。它正在运行 Windows,并且磁盘正在使用 NTFS。其他具有相似数量的文件夹/文件但运行 Linux 的用户体验扫描时间低于 10 秒,无论使用何种方法。
我试图了解Files.walkFileTree
在带有 NTFS 的 Windows 上使用会导致巨大性能损失的原因,但鉴于我无法访问运行 Windows 的测试系统,我无法调试代码以了解时间花在哪里。
您是否知道在 Windows NTFS 下遍历文件树是否存在已知问题?如果还有其他方法可以用来执行该任务?请记住,我需要处理AccessDeniedException
用户代码。
解决方案
推荐阅读
- jenkins - 午餐 slave-agent.jnlp 的橙色按钮未显示
- asp.net-core - 如何在多个 API/Web 项目中使用 Serilog?
- angular - 如何在 Angular 和 rxjs 中的 Obersavble 类型的数组中查找或添加项目?
- python - 消息:使用 selenium python 向 Youtube 的搜索栏发送密钥 [search_bar.send_keys(course_name)] 时元素不可交互错误
- python - 正确的自定义可写(和可读)ModelSerializer 字段
- java - Apache Beam GroupByKey 重复事件
- javascript - 单击按钮时如何生成一组数组,而不会使第一个消失?
- python - 我正在运行的 python 版本之间的混淆
- python - python列表操作来比较元素的一部分而不是完整的元素
- python - 如何从 python 列表中的字符串中删除不需要的 html 代码?