优化这个java代码?

时间:2011-04-18 19:38:06

标签: java performance

我有一个石英调度程序作业,每隔10秒扫描一个目录,并将所有pcl文件转换为pdf文件。

这里我放置了扫描目录的部分代码并加载了所有文件,并为每个文件调用了一些转换它的方法。

    FileExtensionFilter extFilter = new FileExtensionFilter();
    extFilter.setAllowAll(false);
    extFilter.addExtension(_fExtension);
    // Filter out all files that match.
    File[] filteredFileList = fInbox.listFiles(extFilter);
    for (File fSrc : filteredFileList) {
       try {
          //call the methods to convert fSrc file
       }catch (Exception e){
         //threat exception's code
       }

如果我有30个pcl文件但是如果我有50个例子,则所有工作都很好,处理速度会慢一些。

问题是:有没有办法改善这个循环?基本上不是“等待”文件被处理,而是进一步采取另一个,所以一个?

我正在考虑多线程,但我不确定这是否适用于此文件系统扫描转换任务... 你能提出一些建议吗?

感谢。

Ps:请注意,如果我丢了30个文件,那么另外30个文件都很好用。当我立刻抛出 更多文件时,性能会受到影响......

2 个答案:

答案 0 :(得分:3)

节流它所以它每10秒只挑选20个文件。如果你扔50个文件,它会做20个,然后删除它们,然后再做20个,然后删除它们,然后再做10个并删除它们。

可能需要更长的时间(一些停机时间)但你不会搞砸你的调度程序。

答案 1 :(得分:0)

我建议你看看jNotify。它允许您在目录中出现/修改/删除文件的确切时间收到通知。这样,您可以在文件出现时开始处理,这可能比一次处理所有文件更好。

这将是Java 7中JDK核心的一部分。This article将告诉您更多相关信息。 java.nio.file包有一个WatchService API来支持此功能。

虽然正如其他人所说的那样,你的问题是I / O绑定比CPU绑定更多。如果您正在进行大量转换,那么更快的硬盘驱动器(可能是SSD)将会提供更大的帮助。