Dot-Net

更快(最快?)的方式來獲取超過 200,000 個文件的目錄中的文件數量

  • January 2, 2021

我有一些包含測試數據的目錄,通常每個目錄有超過 200,000 個小(~4k)文件。

我正在使用以下 C# 程式碼來獲取目錄中的文件數:

int fileCount = System.IO.Directory.GetFiles(@"C:\SomeDirectory").Length;

然而,這非常非常慢 - 我可以使用任何替代方案嗎?

編輯

每個文件夾包含一天的數據,我們將擁有大約 18 個月的目錄(約 550 個目錄)。我也對人們通過將平面目錄結構改造成更嵌套的目錄結構而發現的性能增強非常感興趣。

您獲得的程式碼很慢,因為它首先獲取所有可用文件的數組,然後獲取該數組的長度。

但是,您幾乎可以肯定不會找到比這更快的解決方案。

為什麼?

訪問控制。

目錄中的每個文件都可能有一個訪問控制列表 - 這可能會阻止您查看該文件。

作業系統本身不能只說“嘿,這裡有 100 個文件條目”,因為其中一些可能代表您不允許知道存在的文件 - 它們根本不應該顯示給您。因此作業系統本身必須遍歷文件,逐個文件檢查訪問權限。

有關此類事情的更詳細討論,請參閱The Old New Thing 的兩篇文章:

僅供參考,.NET 4 包含一個新方法Directory.EnumerateFiles,它完全符合您的需求,非常棒。您可能沒有使用 .NET 4,但無論如何都值得記住!

**編輯:**我現在意識到 OP 想要文件的數量。但是,這種方法非常有用,我將這篇文章保留在這裡。

引用自:https://stackoverflow.com/questions/1192951