1
3
你得弄清楚为什么这么慢。 当您运行progrma时,进程的CPU利用率是多少。如果它超过50%的用户,那么你应该能够选择你的程序,如果它不到20%有没有那么多你可以做。 通常这种方法比较慢,因为您正在检查的文件在磁盘上,而不是在内存中。如果是这种情况,您需要加快访问磁盘的速度,或获得更快的驱动器。例如,SSD的速度可以提高10-100倍。 批量查询可能会有帮助。您可以使用多个线程来检查上次修改的日期。例如,有一个固定大小的线程池,并为每个文件添加一个任务。线程池的大小决定了一次轮询的文件数。 这允许操作系统重新排序请求以适应磁盘上的布局。注意:这在理论上是很好的,但是您必须测试这是否会使您的操作系统/硬件上的速度更快,就像它可能会使速度更慢一样。;) |
2
1
不幸的是,Java处理查找lastmedited的方式很慢(基本上它在您请求信息时为每个文件查询底层文件系统,在listFiles或类似文件上不存在此数据的大容量加载)。 您可以潜在地调用更高效的本机程序来批量执行此操作,但任何此类解决方案都将与您部署到的平台紧密相关。 |
3
1
我想你是在网络上做这件事,否则复印件就没什么意义了。网络目录操作慢,运气不好。您总是可以将文件复制到某个大小阈值以下,无论是什么使总操作所需时间最少。 我不同意Kris的观点:Java做这件事的方式没有什么惊人的低效,而且无论如何它确实必须这样做,因为你想要最新的价值。 |
4
1
所以我在网络驱动器上看到了这个。很痛苦。我有一个目录,上面有17000多个文件。在本地驱动器上,检查上次修改的日期所用的时间不到2秒。在一个联网的硬盘上花了58秒!!! 当然,我的应用程序是一个互动的应用程序,所以我有一些投诉。 经过一些研究,我决定可以实现一些JNI代码来实现Windows Kernel32 findfirstfile/findnextfile/findclose,以显著改善进程,但后来我有了32位和64位版本等等。然后失去跨平台能力。 尽管我在这里做了一点卑鄙的勾当。我的应用主要在windows上运行,但我不想限制它这样做,所以我做了以下操作。检查我是否在windows上操作。如果是的话,看看我是否在使用本地硬盘。如果不是,那我们就用黑客的方法。 我把所有东西都不区分大小写。对于其他操作系统来说,可能不是一个好主意,因为它们可能有一个同时包含“ABC”和“ABC”文件的目录。如果您需要关心这个问题,那么您可以通过创建一个新文件(“ABC”)和一个新文件(“ABC”),然后使用equals方法进行比较来决定。在不区分大小写的文件系统(如windows)上,它将返回true,但在unix系统上,它将返回false。 虽然这可能是一个有点黑客花的时间从58秒到1.6秒在网络驱动器上,所以我可以与黑客生活。
|
Tristan · 如何在写入数据后打开txt文件? 6 年前 |
Adam Hanek · 从命令创建文件夹并打印到文本文件 6 年前 |
SoSo · 如何打开具有部分名称的文件并在c#[关闭]中读取其行 6 年前 |
O. Schultz · 如何逐行提取特定关键字,然后声明为变量 6 年前 |
thatsHeavyDoc · 缓冲区清除-输出不符合预期 6 年前 |