2011-04-18 87 views
1

我有一个石英调度程序作业,每10秒扫描一个目录并将所有pcl文件转换为pdf文件。优化此java代码?

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

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个文件很好。当我一次抛出更多文件时,性能会受到影响...

回答

3

调节它使其每10秒只能选取20个文件。如果你扔50个文件,它会做20个,并删除它们,然后再做20个,然后删除它们,然后再做10个并删除它们。

它可能需要一些时间(有些停机时间),但你不会搞砸你的调度。

+0

呃..这是一个不错的方法! – 2011-04-18 19:42:17

+0

你也可以跟踪你的时间。在循环中,9500毫秒后停止,并让下一个“运行”处理它。 – corsiKa 2011-04-18 19:43:15

+2

+1。另外文件系统转换任务通常不会受到多线程的限制。这是因为瓶颈不是CPU,而是IO。 – 2011-04-18 19:43:21

0

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

这将是Java 7中JDK核心的一部分。This article会告诉你更多关于它的信息。 java.nio.file包有一个WatchService API来支持这个。

尽管如其他人所说,您的问题比受CPU限制的I/O限制更多。如果您正在进行大量转换,则更快的硬盘驱动器(可能是SSD)会有更大的帮助。