2011-04-18 92 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)會有更大的幫助。