2016-07-07 62 views
0

我有一個相對路徑的字符串列表。我也有一個包含這些文件的根路徑的字符串。現在我刪除它們像這樣:刪除數百萬個文件的最快方法

foreach (var rawDocumentPath in documents.Select(x => x.RawDocumentPath)) 
{ 
    if (string.IsNullOrEmpty(rawDocumentPath)) 
    { 
     continue; 
    } 
    string fileName = Path.Combine(storagePath, rawDocumentPath); 
    File.Delete(fileName); 
} 

的問題是,我打電話Path.Combine每個文件,它是夠慢。 如何加快此代碼?我無法刪除整個文件夾,我無法更改當前目錄(因爲它影響整個程序)...

我需要類似的東西,它可以快速刪除指定目錄中的幾個文件。

+2

看不到任何會減慢你​​的代碼,具有文件操作的瓶頸在正常情況下始終是I/O操作。您可能會嘗試在此處使用多線程,例如documents.AsParallel()。ForAll() –

+0

@MichaelSander我知道,但磁盤可以組織批量刪除,你知道,命令隊列等。 –

+0

如果你知道它是「全部」的東西,你可以做一個「* .doc」類型的方法,但是當你需要做特定的時候..你更有限 – BugFinder

回答

1

如果你的磁盤可以處理它,parallizing應該有很大的幫助:

documents.AsParallel().ForAll(
    document => 
    { 
     if (!string.IsNullOrEmpty(document.RawDocumentPath)) 
     { 
      string fileName = Path.Combine(storagePath, document.RawDocumentPath); 
      File.Delete(fileName); 
     } 
    }); 
+0

那麼,ForAll +原生FileDelete似乎是一個答案。有趣的,some1 downvoted,但沒有寫爲什麼:)有些人真的很奇怪... –

相關問題