我有一个石英调度程序作业,每隔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个文件都很好用。当我立刻抛出 更多文件时,性能会受到影响......
答案 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)将会提供更大的帮助。