加快文件系统访问速度?

Ama*_*a S 10 java filesystems

我的应用扫描部分文件系统,我的用户报告说扫描网络驱动器时速度非常慢.测试我的代码,我确定的瓶颈:方法File.isFile(),File.isDirectory()以及File.isHidden(),这些都是调用fs.getBooleanAttributes(File f).在Windows网络驱动器上,此方法似乎非常慢.如何提高性能?我可以避免以某种方式调用此方法吗?

ska*_*man 10

防御性代码通常会调用这些isXYZ()方法,这通常是很好的做法.但是,正如您所发现的,有时性能很差.

另一种方法是假设文件是​​文件,存在,可见,可读等,只是尝试阅读它.如果它不是那些东西,你会得到一个例外,你可以捕获,然后做检查,找出到底出了什么问题.这样,你就可以针对常见情况进行优化(即一切都很好),并且只在出现问题时执行慢速操作.

  • 如果必须调用这些方法,请按照允许在大多数情况下短路的顺序执行.如果isFile()为true,则没有理由调用isDirectory(),如果isHidden()为true,则没有理由调用它. (2认同)

mpe*_*son 6

你是如何建立这个文件列表的?除非你同时在系统上显示每个文件,否则你应该有一些选择......

  1. 仅在用户请求时处理此信息.例如,他们点击"Windows"文件夹,此时您可以在Windows中处理文件.
  2. 在后台线程中处理此信息,给出更好响应时间的错觉.

也许如果您显示用于构建列表的代码,我们可以找到其他一些改进的方面.(为什么不能根据用于收集信息的方法推断出类型?如果你正在调用像GetFiles()这样的方法,你不知道返回的所有内容都是文件吗?)