2011-04-14 25 views

回答

124

the docs

的EnumerateFiles和GetFiles的方法的區別如下:當您使用EnumerateFiles,你可以返回整個集合之前開始枚舉名稱的集合;當您使用GetFiles時,您必須等待返回數組之前返回整個名稱數組。因此,當您使用許多文件和目錄時,EnumerateFiles可以更高效。

所以基本上,EnumerateFiles返回IEnumerable它會有所評價懶惰,而GetFiles返回string[]必須被完全填充它可以返回之前。

+3

懶惰評估可能不會完全免費 - 例如,如果你最終將它放回數組中(我看到了!)。當「yagni」-all時,懶惰效率很高 - 你不需要所有的元素,並且在幾個之後停止迭代。 – 2013-04-03 15:16:39

+3

如果你打算枚舉一個如此龐大的集合,那麼首先在內存中構建整個集合過於沉重,那麼懶惰枚舉也很有趣。您可以隨時處理這些物品,並忘記它們。 – 2016-01-07 18:49:42

+0

@TomaszGandor:或者當不需要存儲所有文件名時,例如當重命名文件時。 – 2018-01-04 09:21:48

27

EnumerateFiles返回IEnumerable<string>這意味着推遲執行。它僅在Fx4及更高版本中可用。

12

使用EnumerateFiles時,如果您使用.Last,則所有速度都會丟失。這當然是有道理的,因爲要到達最後一個文件,它需要枚舉所有文件,然後抓取最後一個文件。

但是,使用.First.FirstOrDefault變得非常快,因爲它只是抓取第一個項目並繼續前進。

+5

這個非常古老的問題除了'Array'和'Enumerable'外還有什麼區別。您的答案對所有這些情況都是通用的,但不回答所問的問題。 – Ashigore 2014-06-11 17:48:33

+1

問題是,在某些情況下,EnumerateFiles可以讓您更快地訪問數據。 – Skotte 2015-03-25 04:47:16

+8

重點是,這是一個非常有用的評論,但它不回答這個問題。有一個區別。 – djv 2015-08-06 14:35:49