2013-01-17 78 views
5

只是一些建議 我有100.000 + xml文件處理和移動到另一個系統。使用ParallelForeach處理文件。這是最好的方法

這個概念很簡單我有這樣一個循環:

public void ProcessFiles() 
    { 
     IEnumerable<FileInfo> orderedFiles = GetFilesOrdered(); 

     foreach (FileInfo file in orderedFiles) 
     { 
      ProcessFile(file); 
     } 
    } 

我一直在閱讀有關任務並行庫,但沒有那麼自信。 這不是非常緊張的線程。 似乎TPL爲我包裝很多。

簡而言之,它只是一個使用parallel.Foreach的案例。

任何樣品或建議

+0

嗨,爲了線程安全,最好確保任何這些文件不能同時訪問。 –

+0

@ Joe.wang謝謝你是否要加鎖?如果不是,你能給我一個片段嗎?謝謝你的時間 – user9969

+0

什麼是索引變量?你似乎沒有使用它。 – Bridge

回答

0

是的,它可能是與Parallel.ForEach更換foreach一樣簡單。

您必須記住,多個線程現在將同時執行ProcessFile

因此,如果您正在寫入該方法中的任何共享狀態,則必須使用同步結構來保護它。

如果你是新的多線程,有一個偉大的入門電子書,你應該在這裏讀到:Albahari

+4

還有一個想法:如果IO當前不是瓶頸,那麼添加並行性纔有意義 –

+0

@NicholasButler如何避免使用並行庫的競爭條件呢?你使用鎖 – user9969

+0

@ user231465這是一個巨大的話題。我建議你閱讀Joe Albahari的電子書。如果您要正確編寫併發代碼,您需要了解其中的所有內容。 –

0

希望這對您有所幫助。簡單的片段來演示如何並行移動文件。

 List<FileInfo> files = new List<FileInfo>(); 
     files.Add(new FileInfo("F:\\1.xml")); 
     files.Add(new FileInfo("F:\\2.xml")); 
     files.Add(new FileInfo("F:\\3.xml")); 



     Parallel.ForEach(files, f => 
     { 
      f.MoveTo("d:\\test\\" + f.Name); 
     }); 
相關問題