我必須對包含數百萬個文件的文件夾進行一些清理。最終,我想抓住這些文件,然後看看它們是否存在於數據庫中。但是我需要先抓住這些文件,而不讓程序窒息。獲取數百萬文件的文件夾中的第一個文件
我試着去使用
var file = Directory.GetFiles(uri, "*.*").FirstOrDefault();
的路線然而,這需要永遠運行。由於文件的數量。
是否有更好的方法來抓取不會花費那麼長時間的文件?
我必須對包含數百萬個文件的文件夾進行一些清理。最終,我想抓住這些文件,然後看看它們是否存在於數據庫中。但是我需要先抓住這些文件,而不讓程序窒息。獲取數百萬文件的文件夾中的第一個文件
我試着去使用
var file = Directory.GetFiles(uri, "*.*").FirstOrDefault();
的路線然而,這需要永遠運行。由於文件的數量。
是否有更好的方法來抓取不會花費那麼長時間的文件?
是的,Directory.EnumerateFiles
是你在找什麼。這將延遲加載您的文件,因此發出FirstOrDefault()
不會等待所有文件被讀取。
從文檔:
的EnumerateFiles和GetFiles的方法的區別如下:當您使用EnumerateFiles,你可以返回整個集合之前開始枚舉名稱的集合;當您使用GetFiles時,您必須等待返回數組之前返回整個名稱數組。因此,當您使用許多文件和目錄時,EnumerateFiles可以更高效。
除此之外 - 具有數百萬個文件的文件夾只是一個壞主意。
這就是爲什麼你應該通過在子目錄中批量分割你的文件。一個包含數百萬個文件的目錄是一個糟糕的主意。 –
除了使用已知文件的直接路徑(或基於某種預測算法縮小搜索過濾器)之外,我沒有看到更簡單的方法。也許把它移到一個異步線程,這樣它就不會鎖定你的程序。一個建議是如果您需要多次運行該方法,請將這些文件加載到HashSet中。然後,您可以針對哈希集運行未來呼叫。 –
@LucasTrzesniewski相信我。我確定,因爲他不想要這個。然而,我被解僱了。 – Prescient