Dot-Net
使用 SearchOption.AllDirectories 時 DirectoryInfo.GetFiles 變慢
我正在從 .NET 應用程序中搜尋大量(~200,000)個文件的中等數量(~500 個)文件夾。
我希望使用
DirectoryInfo.GetFiles,傳遞SearchOption.AllDirectories。但是,這種方法似乎比編寫我自己的程式碼來遍歷目錄並GetFiles只傳入一個searchPattern.相關MSDN 資訊:
GetFiles(String)
從目前目錄返回與給定 searchPattern 匹配的文件列表。GetFiles(String, SearchOption)
從目前目錄返回與給定 searchPattern 匹配的文件列表,並使用一個值來確定是否搜尋子目錄。有沒有人有類似的經歷?
這兩個功能實際上因其性能而臭名昭著。原因是
GetFiles遍歷整個目錄樹並構造一個對像數組FileInfo,然後才將結果返回給呼叫者。所述數組的構造涉及大量記憶體分配(我確信它們在List內部使用,但仍然如此),因為無法提前知道條目的數量。如果你真的很喜歡性能,你可以 P/Invoke 到FindFirstFile / FindNextFile / FindClose中,一次將它們抽象成一個
IEnumerable<FileInfo>和yieldFileInfo一個。